0

我有 Table2 和 Table1 的外键。我想创建一个在更新 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 中预先存在的空值显然会丢失。这样做的正确方法是什么?请注意,我在创建表时已经知道级联选项。我只想用触发器来做。谢谢。

4

0 回答 0