Używa schematu informacji zarówno dla tabel, jak i procedur składowanych. Możesz zmienić lub usunąć warunek ROUTINE_TYPE, aby dodać funkcje, a także zmienić typ tabeli, aby zwracać widoki.
Ta odpowiedź daje wyniki, sprawdzając, od jakich tabel zależy procedura składowana. Myślę, że będzie to o wiele dokładniejszy wynik niż sprawdzenie, czy w tekście zapytania znajduje się nazwa. Jeśli procedura odnosi się do tabeli w sekcji komentarza, ten wynik nie zostanie zwrócony w pierwszym zapytaniu, ale będzie w drugim i innych udzielonych odpowiedziach.
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'
edytuj :Oto jak uzyskać zależności bez funkcji. (Najbardziej lubię tę metodę)
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'
Jeśli Twoim konkretnym zastosowaniem jest po prostu znalezienie dowolnego ciągu pasującego do nazwy tabeli, zadziała poniższe:
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'