2011-05-13 174 views

回答

4

看一看所谓SQL Search免费红门工具,它做到这一点 - 它搜索整个数据库的任何类型的字符串(S)的

enter image description here

enter image description here

这对任何DBA或数据库开发人员有很大必备的工具 - 为什么我已经提到它的绝对免费用于任何用途的?

所以在你的情况下,你可以键入你删除的列名,并选择只搜索你的存储过程 - 在一秒钟左右,你将有一个包含特定列的所有存储过程的列表名称。绝对好东西!

+1

它是免费的吗?我们有Red Gate许可证,所以从未检查过...... :-) – gbn 2011-05-13 08:29:17

+0

@gbn:它绝对,完全,完全** - ** F-R-E-E **! :-) – 2011-05-13 14:54:18

3
select object_name(object_id), * 
from sys.sql_module 
where definition like '%ColName%' 
+1

大括号button =格式代码! – gbn 2011-05-13 07:07:58

4

您可以使用sys.sql_modules

SELECT 
    OBJECT_NAME(object_id) 
FROM 
    sys.sql_modules 
WHERE 
    definitiion LIKE '%MyDeletedColumn%' 

或者OBJECT_DEFINITION

的INFORMATION_SCHEMA的意见是不可靠的,因为这样的定义拆分成几个为nvarchar(4000)列。上述两种方法返回nvarchar(最大)

编辑:鉴于SQL搜索是免费的,由marc_s注释,这将是一个更好的解决方案。

+0

一个更简单的方法,如果该列被称为'my_highly_unique_column',可能是我使用的方法。 :)绝对值得+1。 – 2011-05-13 07:04:08

+0

@Will A:如果您的模式为“.MyDeletedColumn”或“MyDeletedColumn”YMMV,您可以对冲您的投注当然。并且谢谢 – gbn 2011-05-13 07:07:19

0

一种可能的方法是用虚拟参数调用每个存储过程,其中SET SHOWPLAN_XML ON处于活动状态。这不会运行该过程,但会生成计划的.xml表示 - 并且如果引用的列丢失,将会失败。但是,如果您使用#temp表,则无论如何都会失败。 :(

你最容易想这个过程自动化,而不是写了3000过程调用

免责声明:这不是防弹的方法对丢失列回升,但好运气找到什么!好

+0

查看免费SQL搜索 - **更好的**在SQL Server中查找东西的方法... – 2011-05-13 16:15:22

相关问题