Ian*_*ose 1 sql-server sql-server-2008
通过使用Juneau(CTP3)或SQL依赖关系跟踪器(来自RedGate),很容易找到"依赖"给定表的所有存储过程.
但是,我们有100个存储过程只能从给定的表中进行选择,因此查看来自Juneau的结果非常耗时.
我需要找到从表中插入/更新/删除数据的过程.
(使用复杂的正则表达式搜索,不是一个可行的解决方案!)
与基督徒一样的警告,没有办法100%确定存储过程更新你的表而不是另一个,这种方法有一些改进:
码:
SELECT 'EXEC sp_helptext '''
+ QUOTENAME(SCHEMA_NAME(p.[schema_id]))
+ '.' + QUOTENAME(p.name) + ''';'
FROM sys.procedures AS p
INNER JOIN sys.sql_modules AS m
ON p.[object_id] = m.[object_id]
INNER JOIN sys.sql_expression_dependencies AS d
ON p.[object_id] = d.referencing_id
WHERE d.referenced_id = OBJECT_ID('dbo.your_table_name')
AND
(
LOWER(m.[definition]) LIKE '%update%'
OR LOWER(m.[definition]) LIKE '%insert%'
OR LOWER(m.[definition]) LIKE '%delete%'
);
Run Code Online (Sandbox Code Playgroud)
现在的一个弱点是sys.sql_expression_dependencies不是100%可靠的 - 但出于上述原因,我仍然更喜欢这样做.
我写了一篇很长篇的关于维护依赖项的文章: