2014-03-27 96 views
1

考慮以下INSERT:捕獲失敗的INSERT值

INSERT INTO CUSTOMERS (ID, NAME, AGE) 
VALUES (100, 'JOHN', 32), 
(101, 'JIM', 35), 
(102, 'SALLY', 21) 

假設一個客戶記錄已經存在ID 101,這INSERT將失敗因主鍵衝突。
有沒有什麼方法可以插入有效的行,同時捕獲失敗的行以供日後處理?

我在想我可能不得不使用遊標來處理INSERT,或者使用'MERGE'DML語句來插入不匹配的id行,並將OUTPUT匹配的行匹配到另一個表。

回答

2

正如所寫,沒有辦法只將有效行插入數據庫。該查詢是一個隱式事務,如果成功或者在出現任何錯誤時回滾,它將被提交。

要實現您正在查找的行爲,您需要4個單獨的INSERT語句。

0

如果您希望插入按寫入方式工作,您將需要某種類型的插入觸發器來檢查INSERTED表,並將尚不存在的記錄插入到實際表中,並插入在其他地方重複行。