2012-07-02 88 views
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

而不是做檢查然後再插入,爲什麼不把它寫成一個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 - 當它可以由一些行的其中斷言是真實的,並且有些行是錯誤的。