触发批量更新时无法正常工作

时间:2012-07-02 09:35:29

标签: 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, Account
      FROM   inserted
  END 

如果更新了一行,它的工作正常 但如果使用批量更新它不起作用。

例如Update Table1 set Number = Number where account <> ''
如果第二个表(客户端)不为空,则不添加任何内容 如果这是空的,那就好了

1 个答案:

答案 0 :(得分:4)

为什么不将它写成单个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

NULL子句中的WHERE检查可以针对Clients中不可为空的任何列。


即使你保持EXISTS签入,你仍然需要类似上面的内容,因为EXISTS检查是在{{{>>所有行中声明了一些内容1}} - 当它可能包含断言为真的某些行,以及某些行为假的行。