2014-03-27 61 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表,并将尚不存在的记录插入到实际表中,并插入在其他地方重复行。