Това използва информационна схема както за таблици, така и за съхранени процедури. Можете да промените или да се отървете от условието ROUTINE_TYPE, за да добавите функции, и можете да промените типа на таблицата, за да върнете изгледи.
Този отговор дава своите резултати, като проверява от какви таблици зависи съхранената процедура. Мисля, че това ще бъде много по-точен резултат от проверката дали име е в текста на заявката. Ако процедурата препраща към таблица в раздел за коментари, тогава този резултат няма да бъде върнат в първата заявка, но ще бъде във втората и ще бъдат дадени други отговори.
SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s ON
s.ROUTINE_NAME IN (SELECT referencing_entity_name
FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT'))
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'
редактиране :Ето как да получите зависимостите без функцията. (Този метод ми харесва най-много)
SELECT DISTINCT t.name [TableName], p.name [ProcedureName]
FROM sys.objects t
LEFT JOIN sys.sql_dependencies d ON
d.referenced_major_id = t.object_id
LEFT JOIN sys.objects p ON
p.object_id = d.object_id
AND p.type = 'p'
WHERE t.type = 'u'
Ако вашата конкретна употреба е просто да намерите всеки низ, който съответства на име на таблица, по-долу ще работи:
SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s
ON CHARINDEX(t.TABLE_NAME, s.ROUTINE_DEFINITION) > 0
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'