0

我有一个触发器在插入到另一个表之前检查数据

  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 <> ''
如果第二个表(客户)不为空,
则如果它为空,则不添加任何内容,则效果很好

4

1 回答 1

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检查正在断言关于所有行的某些内容inserted- 当它可能包含一些断言为真的行和一些断言为真的行时错误的。

于 2012-07-02T09:37:49.357 回答