Sql server 临时插入表中多行的帐户
我编写了一个触发器来跟踪行的更新时间Sql server 临时插入表中多行的帐户,sql-server,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) 但是,我相信,如果同时更新多个行,那么这个触发器将出现问题。这是正确的吗?如果是,我如何处理这种情况?是的,如果一次更新多个,这将导致问题。它将导
ALTER TRIGGER [dbo].[set_updated_on_update] ON [dbo].[Jobs]
FOR Update
AS
UPDATE Jobs
SET Updated = 'true'
WHERE ID = (SELECT ID FROM inserted)
但是,我相信,如果同时更新多个行,那么这个触发器将出现问题。这是正确的吗?如果是,我如何处理这种情况?是的,如果一次更新多个,这将导致问题。它将导致错误的原因是,在进行直接比较时,此查询返回多个值:
Select ID From Inserted
以下是您可以使用的一些备选查询:
使用连接
:
Update J
Set Update = 'true'
From Jobs J
Join inserted I On J.ID = I.ID
Update Jobs
Set Updated = 'true'
Where ID In (SELECT ID FROM inserted)
在中使用:
Update J
Set Update = 'true'
From Jobs J
Join inserted I On J.ID = I.ID
Update Jobs
Set Updated = 'true'
Where ID In (SELECT ID FROM inserted)
使用存在
:
Update J
Set Update = 'true'
From Jobs J
Where Exists
(
Select *
From Jobs I
Where I.ID = J.ID
)
当然,搞乱了我的标记JOIN和IN方法之间有什么显著的区别吗?这取决于你有多少数据,但可能没有。不过我个人会使用JOIN
overIN
。这在我的触发器中起作用,@Jeremy Leve me alonese告诉我14个更正是否有一个JOIN