我需要在表中插入大约100行-其中一些行之前已经插入,另一些行尚未插入
这是我的插入,如果主键不存在,它可以正常工作。我将运行这个100次,每次使用不同的值。但是,如果主键存在,它将失败,并停止以后的命令运行。
如何忽略失败并继续前进,还是简单地忽略重复?
INSERT INTO MY_TABLE
VALUES( 12342, 'fdbvdfb', 'svsdv', '5019 teR','' , 'saa', 'AL',35005 , 'C', 37, '0',368 , 'P', '2023-02-13', '2023-01-01', '2023-01-10', '2023-01-20','' , 'Test', 'Test', 'Test', 'JFK', '', null, 'Y', 'Y', '', '', '', '', '', '',2385 ,2 , '', 'N', '2023-01-16', '2023-01-20', '', NULL,NULL, NULL, NULL, 'Y', 'Test', 'Test', '', 'N', 'Test', '')
这是错误:
SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "XPS01ME1" constrains
将IGNORE插入投掷:
The use of the reserved word "IGNORE" following "" is not valid.
如果有帮助,我使用的是WinSQL 10.0.157.697
4条答案
按热度按时间h5qlskok1#
您没有提到Db2的平台和版本,所以我将向您介绍
MERGE
statement的Linux/Unix/Windows(LUW)文档...因为我不知道表名或列名,所以我只给予您一个使用伪名称的示例。
您基本上是在一行的运行中构建临时表
table( values(1,1,'CMW',5,1) ) tmp ( tblKey, fld1, fld2, fld3, fld4)
然后,如果通过
on src.tblKey = tgt.tblekey
没有匹配的记录,则执行插入。请注意,虽然您可以这样做100次,但一次处理所有100行是性能更好的解决方案。
或者,您可以创建一个实际的临时表,插入100行(最好是在一次插入中),然后使用
MERGE
。20jt8wwn2#
你可以用如下的复合语句来完成:
| 识别号|
| - ------|
| 1个|
| 四个|
fiddle
tgabmvqs3#
您必须在INSERT查询中提到列名和值,如下所示:
在上面的Customers表中,CustomerId字段是主键自动递增。我们不需要为此插入值。
请尽量让我们知道。
yvt65v4c4#
这就是如何忽略db2中的错误--
此处记录https://www.ibm.com/docs/en/db2-for-zos/12?topic=procedure-ignoring-condition-in-sql