2012-02-01 72 views
4

我試着將內容從一列在一個表複製到另一個,並在同一時間要與創建每行一個遞增的數字來填充主鍵列:DB2:使用select插入到每個新行中,爲每個插入增加一列?

我曾嘗試做如下:

INSERT INTO Table1 (col1, col2) VALUES((SELECT col1 FROM table2), (SELECT NEXTVAL FOR col2_SEQ FROM sysibm.sysdummy1)); 

但出現以下錯誤:

DB21034E The command was processed as an SQL statement because it was not a 
valid Command Line Processor command. During SQL processing it returned: 
SQL0348N "NEXTVAL FOR col2_SEQ" cannot be specified in this 
context. SQLSTATE=428F 

看來,我不能以這種方式使用的序列值,還有沒有其他的方法可以讓我實現我想要做什麼?我只需要table1中的col2,爲來自table2的col1中的每個新條目填充唯一的BIGINT。

回答

3

如果您在Linux/Unix/Windows(可能是其他人),我認爲您只需要NEXT VALUE FOR sequence。在這種情況下,您不需要從sysdummy中進行額外的選擇。

INSERT INTO table1 (col1, col2) 
    SELECT col1, NEXT VALUE FOR col2_SEQ 
    FROM table2 
+0

我嘗試了這種方式,它給我確切的同樣的錯誤。 – 2012-02-02 15:47:23

+0

下一個值是db2版本9.7! – 2012-02-03 10:32:11

+0

@Mo,你正在運行什麼平臺和DB2版本? – bhamby 2012-02-03 14:16:21

0

也許你shuould spezify列如下: COL2 SMALLINT NOT NULL默認身份產生(從1開始,通過增加1)

,並從表2

插入table1的選擇COL1,默認
1

有3種方法可以在DB2中生成唯一值。

  1. GENERATE_UNIQUE功能
  2. IDENTITY列
  3. SEQUENCE對象

假設col2_SEQ創建類似於下面的語句: CREATE SEQUENCE col2_SEQ
AS INTEGER
START WITH 1個
INCREMENT BY 1
NO MINVA LUE
NO MAXVALUE
NO CYCLE
ORDER

insert語句可以寫成如下: INSERT INTO表1(COL1,COL2) VALUES((SELECT COL1 FROM表2), NEXT VALUE FOR col2_SEQ)

更多的信息,每個上面提到的三種方法,可以在這裏找到http://www.ibm.com/developerworks/data/library/techarticle/0205pilaka/0205pilaka2.html