2012-02-01 69 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