2012-04-18 68 views
3

我试图想出一个执行以下操作的DB2 SQL语句,但如果允许,我不确定 。使用参数和select语句创建一个SQL插入语句

我知道有可能insert into tableA (...) Values (?,?,?,...)
然后为这些参数?分配值。

是否可以预先定义其中一个参数的值?

例如,我试图插入的一列是ID column,我想使它与select max(id) + 1 from tableA类似。

这就是我想要的 - 这个语法可能在db2

insert into tableA (ID, Text1, Text2) VALUES (select max(id)+1 from tableA, ?, ?) 

反正 - 任何帮助将不胜感激!

谢谢!!

+0

我很好奇,为什么你不希望使用自动生成主键? 'CREATE TABLE mytable(id INTEGER GENERATED ALWAYS作为IDENTITY PRIMARY KEY,...)' – dasblinkenlight 2012-04-18 13:55:56

+0

我无法控制表的创建方式,但感谢指针! – aggietech 2012-04-18 13:59:02

回答

3

这应该工作:

insert into tableA values((select max(id)+1 from tableA),'text1','text') 
+0

这似乎工作正常 - 谢谢! – aggietech 2012-04-18 14:15:12

+1

听起来不是线程安全的 – bbozo 2014-09-01 13:02:30

0

这听起来像你想要一个主键作为你的表上的索引。

db2 alter table tableA add primary key (id) 

这将在您的表格中创建一个列,当您添加新记录时它将自动递增。 源(http://www.ibm.com/developerworks/data/library/techarticle/dm-0401melnyk/

+0

是的 - 这是回答我的问题的一种方式 - 但另一方面是否有混合/匹配值和参数的方法? – aggietech 2012-04-18 14:03:25

+1

在DB2中,INSERT可以采用VALUES参数或SELECT,但不能同时包含在一个查询中: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fsqlp% 2Frbafymultrow.htm – graypay 2012-04-18 14:10:06

0

您也可以尝试使用OVERRIDING USER VALUE参数:

INSERT INTO TableA 
OVERRIDING USER VALUE 
SELECT 0,Text1, Text2 
From TableB