我有一个包含100个表和存储过程的庞大数据库.使用SQL Server 2005,如何获取正在对给定表执行插入或更新操作的存储过程列表.
sys.sql_dependencies
具有依赖项的实体列表,包括sproc在查询中包含的表和列.有关获取依赖项的查询示例,请参阅此文章.下面的代码片段将按存储过程获取表/列依赖项列表
select sp.name as sproc_name ,t.name as table_name ,c.name as column_name from sys.sql_dependencies d join sys.objects t on t.object_id = d.referenced_major_id join sys.objects sp on sp.object_id = d.object_id join sys.columns c on c.object_id = t.object_id and c.column_id = d.referenced_minor_id where sp.type = 'P'
select so.name, sc.text from sysobjects so inner join syscomments sc on so.id = sc.id where sc.text like '%INSERT INTO xyz%' or sc.text like '%UPDATE xyz%'
这将为您提供所有存储过程内容的列表,其中包含针对特定表的INSERT或UPDATE(您显然可以调整查询以适应).此外,更长的过程将在返回的记录集中的多行中断开,因此您可能需要对结果进行一些手动筛选.
编辑:调整查询以返回SP名称.另外,请注意上面的查询将返回任何UDF以及SP.