2012-04-18 69 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