T1 と T2 という 2 つのテーブルがあり、これらはデータを含む既存のテーブルです。T1 と T2 の間には 1 対多の関係があります。T1 のレコードが削除されると、T2 の関連するすべてのレコードも削除されるため、SQL Server で連鎖削除を実行するには、テーブル定義をどのように変更すればよいでしょうか。
それらの間には外部制約が設定されています。テーブルを削除したり、T2 の削除を実行するトリガーを作成したりしたくありません。たとえば、従業員を削除すると、すべてのレビュー レコードも削除される必要があります。
T1 - 従業員、
Employee ID
Name
Status
T2 - パフォーマンスレビュー、
Employee ID - 2009 Review
Employee ID - 2010 Review
ベストアンサー1
SQL Server Management Studio で既存の外部キーに「カスケード削除」を追加するには:
まず、外部キーを選択し、新しいクエリ ウィンドウで「DROP して作成...」を開きます。
次に、コマンドON DELETE CASCADE
に以下を追加しますADD CONSTRAINT
:
ちなみに、外部キーのリストを取得し、どの外部キーで「カスケード削除」が有効になっているかを確認するには、次のスクリプトを実行します。
SELECT
OBJECT_NAME(f.parent_object_id) AS 'Table name',
COL_NAME(fc.parent_object_id,fc.parent_column_id) AS 'Field name',
delete_referential_action_desc AS 'On Delete'
FROM sys.foreign_keys AS f,
sys.foreign_key_columns AS fc,
sys.tables t
WHERE f.OBJECT_ID = fc.constraint_object_id
AND t.OBJECT_ID = fc.referenced_object_id
ORDER BY 1
DROP
また、外部キー制約のために特定のテーブルにアクセスできないが、どの FK が問題の原因になっているのかがわからない場合は、次のコマンドを実行できます。
sp_help 'TableName'
その記事の SQL は、特定のテーブルを参照するすべての FK をリストします。
これがすべて役立つことを願っています。
長い指を立てて申し訳ありません。ただ主張したかっただけです。