小新技术网WWW.XKER.ORG 学无止境,我们永远在路上。在路上,是生命的远行,是为温暖身边人!
操作系统 - 编程开发 - 聊天软件 - 网络 - 站长之家 - 工具软件 - 办公 - 图像动画 - 安全 - 网页设计 - 硬件 - 服务器 - 存储 - 手机 - 资讯 - 下载
您现在所在的位置:小新技术网 > 编程开发 > 浏览内容:更新数据库对象依赖关系

更新数据库对象依赖关系

小新技术网 XKER.ORG 2008-11-21 来源/作者:Tianjon 收藏本页
 在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'

  看看结果吧!

  其实,针对这些特性,我们可以用上面这段脚本来检查生产数据库数据库存储过程的健康状况,发现缺失的依赖关系!虽然用处不大,毕竟是一个知识点。与大家分享...

【重要声明】:小新技术网刊载此文仅为提供更多信息目的,并不代表小新技术网同意文章的说法或描述,也不构成任何建议,对本文有任何异议,请在下面提出建议。
发表意见(提示:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。)
  • 排行
  • 推荐
  • 最新