我正在寻找一种方法来查看所有存储过程对特定表的影响。有没有比使用LIKE
更好的方法?
select * from DatabaseName.information_schema.routines
where routine_type = 'PROCEDURE'
and ROUTINE_DEFINITION like '%TableName%'
答案 0 :(得分:0)
我认为这些mgmt对象是在SQL Server 2012中添加的,但这些语句是我用来查找依赖项的:
SELECT
OBJECT_SCHEMA_NAME(referencing_id) AS srcschema,
OBJECT_NAME(referencing_id) AS srcname,
referencing_minor_id AS srcminorid,
referenced_schema_name AS tgtschema,
referenced_entity_name AS tgtname,
referenced_minor_id AS tgtminorid
FROM sys.sql_expression_dependencies;
SELECT
referenced_schema_name AS objschema,
referenced_entity_name AS objname,
referenced_minor_name AS minorname,
referenced_class_desc AS class
FROM sys.dm_sql_referenced_entities('dbo.ProcName', 'OBJECT');
SELECT
referencing_schema_name AS objschema,
referencing_entity_name AS objname,
referencing_class_desc AS class
FROM sys.dm_sql_referencing_entities('dbo.TableName', 'OBJECT');
答案 1 :(得分:0)
此查询将为您提供依赖于表格的所有存储过程' MyTable':
SELECT s.name as [ObjectName], t.name as [DependsOn]
FROM sys.sql_expression_dependencies d
INNER JOIN sys.objects s ON d.referencing_id = s.object_id
INNER JOIN sys.objects t ON d.referenced_id = t.object_id
WHERE t.name = 'MyTable' AND s.type = 'P'
您可以将WHERE子句更改为更具体或更不具体,或者如果您愿意,还可以添加函数,视图等。
答案 2 :(得分:0)
您可以将表元数据连接到存储过程元数据,如下所示:
SELECT sp.SPECIFIC_NAME
,t.TABLE_NAME
FROM information_schema.routines sp
INNER JOIN INFORMATION_SCHEMA.TABLES t
ON sp.ROUTINE_DEFINITION LIKE '%' + t.TABLE_NAME + '%'
WHERE sp.routine_type = 'PROCEDURE'
ORDER BY t.TABLE_NAME