我有一个触发器,我写的是跟踪行何时更新。
ALTER TRIGGER [dbo].[set_updated_on_update] ON [dbo].[Jobs]
FOR Update
AS
UPDATE Jobs
SET Updated = 'true'
WHERE ID = (SELECT ID FROM inserted)
但是,我相信,如果同时更新多行,则此触发器会出现问题。它是否正确?如果是这样,我该如何处理这种情况?
答案 0 :(得分:3)
是的,如果您一次更新多个,这将导致问题。导致错误的原因是,当您进行直接比较时,此查询会返回多个值:
Select ID From Inserted
以下是您可以使用的一些备用查询:
使用JOIN
:
Update J
Set Update = 'true'
From Jobs J
Join inserted I On J.ID = I.ID
使用IN
:
Update Jobs
Set Updated = 'true'
Where ID In (SELECT ID FROM inserted)
使用EXISTS
:
Update J
Set Update = 'true'
From Jobs J
Where Exists
(
Select *
From Jobs I
Where I.ID = J.ID
)
答案 1 :(得分:0)
UPDATE Jobs SET Update = 'true'
FROM INSERTED
WHERE inserted.id=Jobs.id