2016-10-11 2 views
0

Я ищу способ увидеть, какие хранимые процедуры влияют на конкретные таблицы. Есть ли лучший способ, чем использовать LIKE?Запрос, чтобы указать, какие таблицы используются в хранимых процедурах

select * from DatabaseName.information_schema.routines 
where routine_type = 'PROCEDURE' 
and ROUTINE_DEFINITION like '%TableName%' 

Источник: Query to list all stored procedures

+0

Попробуйте 'sp_depends tablename' – techspider

+0

Привет Джон, Проверьте ссылку для справки http://stackoverflow.com/questions/ 12622920/list-all-stored-procedure-with-schema-name –

+0

1. SP_Depends не предоставляет необходимую информацию и выполняет быстрый поиск по SP_Depends, общий консенсус в том, что он устарел и не точным. –

ответ

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 более конкретным или менее конкретным, или, если хотите, добавить функции, представления и т. Д.

+0

Спасибо. Хороший и лаконичный. –

0

Я думаю, что эти Упр объекты были добавлены в 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'); 
+0

работает также. Спасибо! –

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 
+0

Я ищу ответ, который не использует «LIKE» из-за последствий для производительности –

Смежные вопросы