捕获INSERT值失败

时间:2014-03-27 18:55:02

标签: sql-server sql-server-2008 insert

考虑以下INSERT:

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

假设id 101已存在客户记录,则此INSERT将因主键违规而失败 有没有办法插入有效行,同时捕获失败的行以供以后处理?

我想我可能必须使用游标来处理INSERT,或使用'MERGE'DML语句来INSERT不匹配的id行,并将OUTPUT匹配的行传递给另一个表。

2 个答案:

答案 0 :(得分:2)

如上所述,无法仅将有效行插入数据库。该查询是一个隐式事务,如果成功则将提交,或者在发生任何错误时回滚。

要实现您正在寻找的行为,您需要4个单独的INSERT语句。

答案 1 :(得分:0)

如果您希望插入按写入方式工作,您将需要某种类型的而不是插入触发器来检查INSERTED表并将尚未存在的记录插入到实际表中并插入副本在其他地方的行。