我在Table1中插入后会触发将在Table2中插入,更新后,Table1中的columnA将在Table2中更新Status_Column,其中Table1.id = table2.id,删除table1之后的行将删除table2中的行table1.id = table2 .ID。
create TRIGGER mytrigger
ON Table1
after UPDATE,INSERT,DELETE
AS
Begin
if update (columnA)
BEGIN
SET NOCOUNT ON;
declare @ID int
select @ID = ID from DELETED
UPDATE Table2
SET T2.Status_Column ='Updated'
From Table2 T2
inner join Table1 T1 on T1.ID = T2.ID
where T1.ID = @ID
End
else if exists (select * from inserted)
Begin
declare @table2_ID int
select @table2_ID = ID from inserted
insert into table2 (ID,Status_Column) values (@table2_ID,'New')
End
else if exists (select ID from deleted)
Begin
delete from table2
from table2 T2 , Deleted d
where t2.id= d.id
End
End
只有删除声明工作:(
答案 0 :(得分:0)
您的根本缺陷是,您似乎希望触发器每行一次 - 这在SQL Server中是 NOT 。相反,触发器会在每个语句时触发,而伪表Deleted
可能包含多行。
鉴于该表可能包含多行 - 您希望在这里选择哪一行?
select @ID = ID from DELETED
未定义 - 您可以从Deleted
中的任意行获取值。
您需要使用Deleted
WILL 包含多行的知识重写整个触发器!您需要使用基于集合的操作 - 不要只期望Deleted
中的一行!