Sql 在DB2数据库中插入多行

Sql 在DB2数据库中插入多行,sql,db2,Sql,Db2,我想在DB2表中插入多行。 我有一个类似这样的查询 insert into tableName (col1, col2, col3, col4, col5) values (val1, val2, val3, val4, val5), (val1, val2, val3, val4, val5), (val1, val2, val3, val4, val5), (val1, val2, val3, val4, val5); 此查询不起作用。我不知道在DB2中是否有语法上更正确的方法来实现

我想在DB2表中插入多行。 我有一个类似这样的查询

insert into tableName 
(col1, col2, col3, col4, col5) 
values 
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5),
(val1, val2, val3, val4, val5);

此查询不起作用。我不知道在DB2中是否有语法上更正确的方法来实现这一点。但是插入我的测试数据会很有用

我假设您使用的是DB2 for z/OS,不幸的是(无论出于何种原因,我一直不明白为什么),它不支持在需要完全选择的地方使用值列表

您可以使用下面的选择按钮。虽然有点笨重,但它可以工作:

INSERT INTO tableName (col1, col2, col3, col4, col5) 
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT val1, val2, val3, val4, val5 FROM SYSIBM.SYSDUMMY1

您的语句在DB2forLinux/Unix/Windows(LUW)上可以使用,至少当我在我的LUW9.7上测试它时是这样。

更新-更不用说冗长的版本了

INSERT INTO tableName (col1, col2, col3, col4, col5) 
VALUES ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5'),
       ('val1', 'val2', 'val3', 'val4', 'val5')

下面的内容也适用于DB2,稍微不太冗长

INSERT INTO tableName (col1, col2, col3, col4, col5) 
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5') UNION ALL
VALUES ('val1', 'val2', 'val3', 'val4', 'val5')
其他方法

INSERT INTO tableName (col1, col2, col3, col4, col5)
select * from table(                        
                    values                                      
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5),   
                    (val1, val2, val3, val4, val5)    
                    ) tmp

我不同意霍根发表的评论。 这些指令适用于IBMDB2Mini,但DB2z/OS的情况并非如此

以下是一个例子:

Exception data: org.apache.ibatis.exceptions.PersistenceException:
The error occurred while setting parameters

SQL: INSERT INTO TABLENAME(ID_, F1_, F2_, F3_, F4_, F5_) VALUES
 (?,          1,          ?,          ?,          ?,          ?),          
 (?,          1,          ?,          ?,          ?,          ?)


Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
ILLEGAL SYMBOL ",". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: FOR <END-OF-STATEMENT> NOT ATOMIC. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.25.17
异常数据:org.apache.ibatis.exceptions.PersistenceException: 设置参数时出错 SQL:插入到TABLENAME(ID、F1、F2、F3、F4、F5)值中 (?, 1, ?, ?, ?, ?), (?, 1, ?, ?, ?, ?) 原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException: 非法符号“,”。一些可能合法的符号是:用于非原子的。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.25.17
因此,我可以确认,内联逗号分隔的批量插入在DB2z/OS上不起作用(也许您可以为它提供一些道具使其工作……

以上所有操作对我都不起作用,唯一起作用的是

insert into tableName  
select 11, 'BALOO' from sysibm.sysdummy1 union all
select 22, nullif('','') AS nullColumn from sysibm.sysdummy1

使用nullif是因为不可能在select语句中传递null,否则。

我认为您不需要输入任何指示符(适当情况下,
null
关键字除外)。您得到的错误代码是什么?
列NULL不在查询中命名的任何表中。
并且我插入NULL的字段允许它。另外还有SQLCODE=-206和-104。您似乎无法直接从中选择
NULL
,其唯一列定义为
notnull
。你可以通过两种方式解决这个问题<代码>选择空值if(0,0)或
选择强制转换(空值为整数)
。我猜DB2希望知道数据类型是什么。希望这能有所帮助。所以,用
NULL
put
SELECT NULLIF(0,0)
?-不管是什么原因,我一直不明白为什么-因为恐龙不了解你的需求。