在SQL Server 2008中查找存在错误的存储过程?
我有一个由近200个表和3000个存储过程组成的数据库。在SQL Server 2008中查找存在错误的存储过程?
我已经从某些表中删除了一些字段,我现在怎么能找到那些被删除的字段被引用的存储过程?
看一看所谓SQL Search的免费红门工具,它做到这一点 - 它搜索整个数据库的任何类型的字符串(S)的
这对任何DBA或数据库开发人员有很大必备的工具 - 为什么我已经提到它的绝对免费用于任何用途的?
所以在你的情况下,你可以键入你删除的列名,并选择只搜索你的存储过程 - 在一秒钟左右,你将有一个包含特定列的所有存储过程的列表名称。绝对好东西!
select object_name(object_id), *
from sys.sql_module
where definition like '%ColName%'
大括号button =格式代码! – gbn 2011-05-13 07:07:58
您可以使用sys.sql_modules
SELECT
OBJECT_NAME(object_id)
FROM
sys.sql_modules
WHERE
definitiion LIKE '%MyDeletedColumn%'
的INFORMATION_SCHEMA的意见是不可靠的,因为这样的定义拆分成几个为nvarchar(4000)列。上述两种方法返回nvarchar(最大)
编辑:鉴于SQL搜索是免费的,由marc_s注释,这将是一个更好的解决方案。
一个更简单的方法,如果该列被称为'my_highly_unique_column',可能是我使用的方法。 :)绝对值得+1。 – 2011-05-13 07:04:08
@Will A:如果您的模式为“.MyDeletedColumn”或“MyDeletedColumn”YMMV,您可以对冲您的投注当然。并且谢谢 – gbn 2011-05-13 07:07:19
一种可能的方法是用虚拟参数调用每个存储过程,其中SET SHOWPLAN_XML ON
处于活动状态。这不会运行该过程,但会生成计划的.xml表示 - 并且如果引用的列丢失,将会失败。但是,如果您使用#temp表,则无论如何都会失败。 :(
你最容易想这个过程自动化,而不是写了3000过程调用
免责声明:这不是防弹的方法对丢失列回升,但好运气找到什么!好
查看免费SQL搜索 - **更好的**在SQL Server中查找东西的方法... – 2011-05-13 16:15:22
它是免费的吗?我们有Red Gate许可证,所以从未检查过...... :-) – gbn 2011-05-13 08:29:17
@gbn:它绝对,完全,完全** - ** F-R-E-E **! :-) – 2011-05-13 14:54:18