我按如下方式执行插入:
INSERT INTO foo (a,b,c)
SELECT x,y,z
FROM fubar
WHERE ...
但是,如果正在插入的某些行违反了 foo 上的重复键索引,我希望数据库忽略这些行,而不是插入它们并继续插入其他行。
有问题的数据库是 Informix 11.5。目前所发生的只是数据库抛出异常。如果我尝试使用以下方法处理异常:
ON EXCEPTION IN (-239)
END EXCEPTION WITH RESUME;
... 它没有帮助,因为在捕获到异常之后,整个插入被跳过。
我认为 informix 不支持 INSERT IGNORE 或 INSERT ... ON DUPLICATE KEY...,但如果我错了,请随时纠正我。
最佳答案
使用 IF 语句和 EXISTS 函数检查现有记录。或者您可以在 WHERE 子句中包含 EXISTS 函数,如下所示
INSERT INTO foo (a,b,c)
SELECT x,y,z
FROM fubar
WHERE (NOT EXISTS(SELECT a FROM foo WHERE ...))
关于sql - 忽略违反重复键索引的行的插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178951/