これは、テーブルとストアドプロシージャの両方に情報スキーマを使用します。 ROUTINE_TYPE条件を変更または削除して関数を追加したり、テーブルタイプを変更してビューを返すことができます。
この回答は、ストアドプロシージャがどのテーブルに依存しているかを確認することで結果を生成します。これは、クエリテキストに名前が含まれているかどうかを確認するよりもはるかに正確な結果になると思います。プロシージャがコメントセクションのテーブルを参照している場合、この結果は最初のクエリでは返されませんが、2番目の回答とその他の回答で返されます。
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'