sql - 忽略违反重复键索引的行的插入

标签 sql database insert indexing informix

我按如下方式执行插入:

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/

相关文章:

SQL Server 将字符串转换为日期时间

sql - Oracle 10g 中的聚合字符串连接

mysql - 根据最接近给定值的值从数据库中查找行

ruby-on-rails - Rails Activerecord 将列添加到多个表

sql - INSERT 是否可以在触发器 "inserted"表中产生多行结果?

sql - SQL - 扩展由交叉应用和枢轴组成的查询

mysql - 如果第一个表中尚不存在给定值,则 SQL 触发器 : Inserting a row in a table after an insert on another table,

mysql - 如何为以下操作创建 SQL 查询?

mysql - 使用 INSERT IGNORE 和 NULL 值在 Mysql 中插入记录

c# - 将 INSERT 查询批处理到 SQL 2005/8 中的最有效和最简单的方法是什么