Ini menggunakan skema informasi untuk kedua tabel, dan prosedur tersimpan. Anda dapat mengubah atau menghilangkan kondisi ROUTINE_TYPE untuk menambahkan fungsi, dan Anda dapat mengubah jenis tabel untuk mengembalikan tampilan.
Jawaban ini menghasilkan hasilnya dengan memeriksa tabel apa yang bergantung pada prosedur tersimpan. Saya pikir ini akan menjadi hasil yang jauh lebih akurat daripada memeriksa apakah sebuah nama ada dalam teks kueri. Jika prosedur merujuk ke tabel di bagian komentar, maka hasil ini tidak akan dikembalikan di kueri pertama, tetapi akan ada di jawaban kedua dan jawaban lain yang diberikan.
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'
edit :Inilah cara mendapatkan dependensi tanpa fungsi. (Saya paling suka metode ini)
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'
Jika penggunaan khusus Anda hanya untuk menemukan string apa pun yang cocok dengan nama tabel, di bawah ini akan berfungsi:
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'