在临时插入表中考虑多行

时间:2015-06-16 18:04:31

标签: sql-server

我有一个触发器,我写的是跟踪行何时更新。

ALTER TRIGGER [dbo].[set_updated_on_update] ON [dbo].[Jobs]
FOR Update 
AS
    UPDATE Jobs
    SET Updated = 'true'
    WHERE ID = (SELECT ID FROM inserted)

但是,我相信,如果同时更新多行,则此触发器会出现问题。它是否正确?如果是这样,我该如何处理这种情况?

2 个答案:

答案 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