DB2 INSERT INTO SELECT状态将行复制到同一张表中,不允许多行。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB2 INSERT INTO SELECT状态将行复制到同一张表中,不允许多行。相关的知识,希望对你有一定的参考价值。
我已经找了几天这个问题的答案,但找不到任何参考这个具体问题的资料。
首先,如果我想使用INSERT INTO SELECT语句将表的行复制过来,回到同一个表中,但用新的id和其中的1个列修改,应该能行吗?
举个例子。
INSERT INTO TABLE_A (column1, column2, column3) SELECT column1, 'value to change', column3 from TABLE_A where column 2 = 'original value';
当我在DB2数据库中尝试这样做时,我得到了以下错误:
INVALID MULTIPLE-ROW INSERT. SQLCODE=-533,SQLSTATE=21501,DRIVER=4.18.60。
如果我运行同样的语句,但我在select语句中放入一个特定的ID来返回,确保只返回1条记录,那么语句就会工作。 但这违背了我想做的事情,即把同一表中的多条记录复制到自己的表中,同时把一个特定的列更新为一个新的值。
谢谢大家!我一直在寻找答案。
我在Db2 11.1.4.0上工作得很好,没有错误。
CREATE TABLE TABLE_A( column1 int , column2 varchar(16), column3 int)
INSERT INTO TABLE_A values (1,'original value',3)
INSERT INTO TABLE_A (column1, column2, column3)
SELECT column1, 'value to change', column3 from TABLE_A where column2 = 'original value'
SELECT * FROM TABLE_A
返回
COLUMN1|COLUMN2 |COLUMN3
-------|---------------|-------
1|original value | 3
1|value to change| 3
也许有什么东西你没有告诉我们......
你没有提到你的平台和版本,但文档似乎很清楚。
对自引用表进行多行INSERT是无效的。
一个带有子选择的INSERT操作试图将多条记录插入到一个自引用表中。INSERT操作的子选区返回的数据不应超过一行。系统操作。INSERT语句无法执行。对象表的内容没有变化。程序员的响应。检查子选择的搜索条件,确保选择的数据不超过一行。
EDIT 显然你在表上有一个自引用约束。 例如:EMPLOYEES表的MANAGER列定义为FK自引用回EMPLOYEES表。
Db2根本不支持你要做的事情。
你需要一个临时表来保存修改后的行。
可以选择,假设你的表有一个主键,尝试使用 MERGE
语句代替。
以上是关于DB2 INSERT INTO SELECT状态将行复制到同一张表中,不允许多行。的主要内容,如果未能解决你的问题,请参考以下文章
请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段。