使用sp_depends查看对象相关性时候,怎么更新数据库对象相关性的信息

vovo2000 2006-06-15 05:49:24
使用sp_depends查看对象相关性时候,有时候因为某些原因无法查出。比如查一个存储过程的相关性时,有时候查不出来,需要Alter一下这个存储过程,或者执行一下这存储过程之后在执行一下sp_depends才能查询出来。
如果有很多存储过程,我怎么样才能一次同时更新这些存储过程的相关性信息啊。

如果可能把出现丢失相关性信息的原因也说明一下,比如什么操作会导致丢失相关性性信息啊。
...全文
352 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vovo2000 2006-06-16
  • 打赏
  • 举报
回复
谢谢邹老大!!马上结帖!!
laoliu666 2006-06-15
  • 打赏
  • 举报
回复
老大就是老大,顶
zjcxc 元老 2006-06-15
  • 打赏
  • 举报
回复
如何一次性更新的问题, 这个有点麻烦, 因为很多情况下不是重新编译一下就可以解决问题的, 而是必须要ALTER一下, 所以不是那么简单.

不过, 还是有一个不是很复杂的方法, 那就是生成脚本, 再执行脚本, 方法如下:
1. 生成脚本
企业管理器--右键你的数据库--所有任务--生成脚本--选择"为所有对象生成脚本", 然后调整一下, 只选择为存储过程生成脚本
然后将脚本保存到一个文件中

2. 创建的脚本的行为是创建存储过程, 我们要把它改成ALTER行为
查询分析器连接到sql服务器, 选择你的数据库, 然后打开刚才生成的脚本文件, 按Ctrl+H打开替换对话框, 将CREATE替换为ALTER

3. 执行脚本完成刷新, 按F5执行修改后的脚本
zjcxc 元老 2006-06-15
  • 打赏
  • 举报
回复
"有时候查不出来,需要Alter一下这个存储过程"

alter 会导致存储过程引用的对象的相关信息被重写, 所以alter 一下之后, 用sp_depends当然就可以查出结果了.

同样用上面的测试示例, 楼主在最后的删除之前做一个ALTER, 然后再查询 EXEC sp_depends, 就会出结果了.
zjcxc 元老 2006-06-15
  • 打赏
  • 举报
回复
--=====================================================
--1. 不会被 sp_depends 查询出来的情况
--=====================================================
/*-- 对象建立的顺序问题
当存储过程引用的对象比存储过程后建立的时候, 就会产生这种情况
一般被视为关联信息丢失
--*/

CREATE PROC dbo.p
AS
SELECT * FROM dbo.tb
GO

CREATE TABLE dbo.tb(id int)
EXEC dbo.p
GO

EXEC sp_depends 'dbo.p'
EXEC sp_depends 'dbo.tb'
GO

DROP TABLE dbo.tb
DROP PROC dbo.p


/*-- 引用的对象删除后再重建
当存储过程引用的对象在删除后重新建立, 这种关联也会丢失
--*/

CREATE TABLE dbo.tb(id int)
GO

CREATE PROC dbo.p
AS
SELECT * FROM dbo.tb
GO

EXEC sp_depends 'dbo.p'
EXEC sp_depends 'dbo.tb'
GO

DROP TABLE dbo.tb
CREATE TABLE dbo.tb(id int)
GO

EXEC sp_depends 'dbo.p'
EXEC sp_depends 'dbo.tb'
GO

EXEC dbo.p
GO

EXEC sp_depends 'dbo.p'
EXEC sp_depends 'dbo.tb'
GO

DROP TABLE dbo.tb
DROP PROC dbo.p

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧