Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 临时插入表中多行的帐户_Sql Server - Fatal编程技术网

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
over
IN
。这在我的触发器中起作用,@Jeremy Leve me alonese告诉我14个更正是否有一个JOIN