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 

1つの行が更新された場合は正常に機能しますが、バッチ更新を使用した場合は機能しません。

たとえば、2番目のテーブル(Clients)が空でない 場合、空の場合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チェックは、null許容ではない任意の列に対して行うことができます。WHEREClients


チェックインを続けても、チェックインはのすべての行について何かをアサートしているEXISTSため、上記のようなものが必要です-アサーションが真であるいくつかの行と、それが真であるいくつかの行で構成されている場合がありますfalse。EXISTSinserted

于 2012-07-02T09:37:49.357 に答える