0

Table1 への外部キーを持つ Table2 があります。Table1 が更新されたときに Table2 を自動的に更新するトリガーを作成したいと考えています。これが私の心にあるものです:

create trigger MyTrigger on Table1 instead of update as
if UPDATE(Table1_ID)
begin
    declare @OldID as int, @NewID as int;
    select @OldID=P_ID from deleted;
    select @NewID=P_ID from inserted;

    update Table2 set Table1_ID=@NewID where Table2.Table1_ID=@OldID;
    update Table1 set Table1_ID=@NewID where Table1_ID=@OldID;
end

外部キー制約との競合があったことを示すエラーを SQL Server から受け取ったため、機能しませんでした。だから私はそれを少し修正しました:

create trigger MyTrigger on Table1 instead of update as
if UPDATE(Table1_ID)
begin
    declare @OldID as int, @NewID as int;
    select @OldID=P_ID from deleted;
    select @NewID=P_ID from inserted;

    update Table2 set Table1_ID=null where Table2.Table1_ID=@OldID;
    update Table1 set Table1_ID=@NewID where Table1_ID=@OldID;
    update Table2 set Table1_ID=@NewID where Table1_ID=null;
end

できます。ただし、トリガーが実行されると、Table2 の既存の null 値は明らかに失われます。これを行う正しい方法は何ですか?テーブルを作成するときのカスケードオプションについてはすでに知っていることに注意してください。トリガーを使ってやりたいだけです。ありがとう。

4

0 に答える 0