考虑以下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匹配的行传递给另一个表。
答案 0 :(得分:2)
如上所述,无法仅将有效行插入数据库。该查询是一个隐式事务,如果成功则将提交,或者在发生任何错误时回滚。
要实现您正在寻找的行为,您需要4个单独的INSERT语句。
答案 1 :(得分:0)
如果您希望插入按写入方式工作,您将需要某种类型的而不是插入触发器来检查INSERTED表并将尚未存在的记录插入到实际表中并插入副本在其他地方的行。