识别插入存储过程

时间:2010-11-10 23:58:57

标签: sql sql-server sql-server-2005 tsql sql-server-2008

如何识别将记录插入“TableXYZ”的存储过程?

我可以有数百个存储过程。

请帮忙。

5 个答案:

答案 0 :(得分:4)

使用:

SELECT OBJECT_NAME(m.object_id), m.*
  FROM SYS.SQL_MODULES m
 WHERE m.definition like N'%INSERT INTO my_table_name%'

这将允许您搜索表引用。

背景:

SYSCOMMENTS和INFORMATION_SCHEMA.routines具有NVARCHAR(4000)列,而SYS.SQL_MODULES定义列为NVARCHAR(MAX)。因此,如果在位置3998使用“my_table_name”,则无法找到它。 SYSCOMMENTS确实有多行,但ROUTINES会截断。

答案 1 :(得分:1)

我相信您应该能够通过在管理工作室上右键单击来查看表的依赖关系。这应该在非常简要的时候显示使用该表的所有存储过程。

答案 2 :(得分:1)

SELECT * FROM sys.sql_modules
WHERE definition like '%insert%TableXYZ%'

......让你走上正确的答案。

答案 3 :(得分:0)

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%insert into dbo.tablexyz%' 
AND ROUTINE_TYPE='PROCEDURE'

您需要调整like子句。

答案 4 :(得分:0)

目前免费的加载项RedGate SQL Search非常有用,因为它可以让您搜索数据库中的所有代码。您可以只搜索表名,看看是否能让您足够接近。如果您始终将INSERT语句写成INSERT INTO TableName,则可以搜索整个短语。

要手动执行此类搜索作为T-SQL查询,您可以在definition系统视图中查询sys.sql_modules列。这为您提供了很大的灵活性,因为您可以使用LIKE和/或PATINDEX来搜索通配符/模式。