1

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質問のコメントは、この質問に影響を与えました。

4

1 に答える 1

1

自分の賢いバージョンは、好奇心旺盛で若いバージョンの自分からの質問に出くわします。答えは

EXEC sp_fkeys 'Users'

+40年から私が今週までに立ち寄って、今後数年間の知恵の言葉が追加されることを願っています:)

于 2014-12-08T17:56:47.323 に答える