Sql server 批量更新时触发器工作不正常
我有一个触发器,在插入到另一个表之前检查数据Sql server 批量更新时触发器工作不正常,sql-server,sql-server-2008,triggers,sql-server-2000,Sql Server,Sql Server 2008,Triggers,Sql Server 2000,我有一个触发器,在插入到另一个表之前检查数据 IF NOT EXISTS (SELECT * FROM inserted, Clients WHERE Inserted.Account = Clients.Account) BEGIN INSERT INTO Clients(GUID, Account, ....) SELECT GUID, A
IF NOT EXISTS (SELECT *
FROM inserted,
Clients
WHERE Inserted.Account = Clients.Account)
BEGIN
INSERT INTO Clients(GUID, Account, ....)
SELECT GUID, Account
FROM inserted
END
如果更新了一行,工作正常
但如果使用批量更新,则其不起作用
例如,updatetable1 set Number=帐户“”所在的编号
如果第二个表(客户端)不为空,则不添加任何内容
如果它是空的,它工作得很好而不是先检查然后插入,为什么不把它写成一个
insert
语句:
Insert into Clients (GUID , Account .....)
Select i.GUID , i.Account
from
inserted i
left join
Clients c
on
i.Account = c.Account
where
c.Account is null
WHERE
子句中的NULL
检查可以用于Clients
中不可为NULL的任何列
即使保持
EXISTS
签入,您仍然需要类似于上面的内容,因为EXISTS
检查是对插入的中的所有行进行断言,而它可能包含一些断言为真的行,还有一些行的值为false。与其先检查然后插入,不如将其作为单个insert
语句写入:
Insert into Clients (GUID , Account .....)
Select i.GUID , i.Account
from
inserted i
left join
Clients c
on
i.Account = c.Account
where
c.Account is null
WHERE
子句中的NULL
检查可以用于Clients
中不可为NULL的任何列
即使保持EXISTS
签入,您仍然需要类似于上面的内容,因为EXISTS
检查是对插入的中的所有行进行断言-当它可能由断言为真的某些行和断言为假的某些行组成时