テーブルAとテーブルBがあります。テーブルBにはテーブルBを参照する外部キー制約があります。ただし、SQL Server 2000ではカスケード削除のみがサポートされているため私はこれをトリガで解決することに決めました。このカスケード無効化トリガがSQL Server 2000で機能しない理由
問題は下記のトリガーが動作しません:
CREATE TRIGGER dbo.TR_A_B_CascadingNullify ON dbo.A
FOR DELETE
AS
UPDATE dbo.B
SET idA = NULL
WHERE idA IN (SELECT id FROM DELETED)
;
に参照されていないという点で、行を削除すると、すべてが動作します。行に参照さ削除された場合でも、それはメッセージDELETE statement conflicted with COLUMN REFERENCE constraint 'FK_B_A'. The conflict occurred in database 'x', table 'B', column 'idA'.
と外部キー制約に失敗し、No
にオプションEnforce Foreign Key Constraint
を設定するときに最後に、トリガが作業を行い、テーブルBの列がNULLに設定されています。
私は間違っていますか?
私はドキュメントで誤解されました。オプションが何を意味しているのかを私にはっきりさせることではなく、FORはAFTERとINSTEAD OFの代替のように見えました...とにかく、今はかなりうまくいきます。 – doekman