【发布时间】:2012-02-01 13:02:46
【问题描述】:
我有一个应用程序可以同时查询和更新两个数据库(彼此不同),它已经使用了大约 10 到 15 年。所以我想开始清理他们的垃圾。
我想做的一件事是删除数据库 B 中错误创建的所有存储过程(因为它们必须进入数据库 A)。
如果我一一进行,很容易,因为我可以判断 sp 是否使用了不在该数据库中的表。但我敢打赌,其中有很多,所以我想得到一个验证这一点的查询。
这是来自微软的链接,解释了这一点:http://msdn.microsoft.com/en-us/library/ms190686.aspx。但它没有给我任何解决方案! :S
但它对某些人有效,但并非对所有人都有效。
那么你们知道任何可以 100% 有效的有效方法吗? 试训:
- 重新编译 > 不是
- sp_refreshsqlmodule > 适用于大多数,但不是全部
- sp_depends > 它可能会起作用,因为所有 SP 都需要依赖于一个表(至少是其中的大多数)。更新:这也不起作用。如果我有一个在两个数据库中查找表的 sp,它将解决那些可以但不是全部的问题。所以我不能依赖“如果没有依赖项,则删除候选对象”。
提前致谢
【问题讨论】:
-
在所有这些上运行
sp_refreshsqlmodule应该已经修复了缺少的依赖项,因为它们是乱序创建的,因此现在这些信息将更加可靠。 -
我在一些我知道必须删除的sps上运行它,命令成功完成。所以它似乎是“刷新模块”但是虽然它会出错,但它不会返回任何错误消息
标签: sql-server sql-server-2005 optimization stored-procedures