ON DELETE = CASCADE設定が欠落している外部キー制約を介して、「メイン」テーブルの特定の列を(直接または間接的に)参照するすべてのテーブルと列のリストを表示したいと思います。
トリッキーな部分は、最大5レベルの深さにわたって間接的な関係が埋もれていることです。(例:...曽孫->FK3=>孫=>FK2=>子=>FK1=>メインテーブル)。リーフテーブル(最初のレベルだけでなく、列)を掘り下げる必要があります。これの「良い」部分は、実行速度が問題にならないことです。将来の関係の問題を修正するために、本番データベースのバックアップコピーで実行されます。
私はそうしSELECT * FROM sys.foreign_keys
ましたが、それは私に制約の名前を与えます-子-親テーブルと関係の列(ジューシーなビット)の名前ではありません。さらに、以前の設計者は、以下のプラクティスとは異なり、FK制約に短い非記述的/ランダムな名前を使用していました
SQL Serverに制約を追加する方法:
ALTER TABLE [dbo].[UserEmailPrefs]
WITH CHECK ADD CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId] FOREIGN KEY([UserId])
REFERENCES [dbo].[UserMasterTable] ([UserId])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[UserEmailPrefs] CHECK CONSTRAINT [FK_UserEmailPrefs_UserMasterTable_UserId]
GO
このSO質問のコメントは、この質問に影響を与えました。