首页  ·  知识 ·  数据库
更新数据库对象依赖关系
佚名  http://www.xker.com/  MS-SQL  编辑:dezai  图片来源:网络
在sql server 中我们会通过邮件菜单来查看一个对象的依赖关系,但有些意外情况会造成查看结果并不是非常的准确!   可以尝试以下例子 :   

在sql server 中我们会通过邮件菜单来查看一个对象的依赖关系,但有些意外情况会造成查看结果并不是非常的准确!
  可以尝试以下例子 :

  第一步:颠倒顺序,创建一个缺失依赖关系的存储过程

  Code

CREATE PROC dbo.TestRefresh1
as
EXEC dbo.TestRefresh2
EXEC dbo.TestRefresh3
EXEC dbo.TestRefresh4
EXEC dbo.TestRefresh5
EXEC dbo.TestRefresh6
GO 
CREATE PROC dbo.TestRefresh2
AS SELECT 1
GO
CREATE PROC dbo.TestRefresh3
AS SELECT 1
GO
CREATE PROC dbo.TestRefresh4
AS SELECT 1

  第二步: 查看一下这个存储过程的依赖关系

  Code

EXEC sp_depends @objname = N'dbo.TestRefresh1'

  在结果中并没有发现dbo.TestRefresh1同其他对象有任何的依赖关系 ,细心的朋友早就发现这个问题是因为创建存储过程时的顺序问题所致。假设我们的数据库中并不缺失相关对象,可以尝试用如下代码来更新他们的依赖关系:

  Code

declare @cmd as nvarchar(max);
declare c cursor fast_forward for
select 'EXEC sys.sp_refreshsqlmodule ' + ''''+schema_name([schema_id])+'.'+ [Name]+'''' as cms from sys.objects where type='p'
open c
fetch next from c into @cmd ;
while @@fetch_status = 0
begin
 exec(@cmd);
 fetch next from c into @cmd;
end
close c;
deallocate c;

  完成之后再次执行

  Code

EXEC sp_depends @objname = N'dbo.TestRefresh1'

 

本文作者:佚名 来源:http://www.xker.com/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读