我试图将内容从一个表中的列复制到另一个表中,同时想要为每个创建的行填充主键列的递增编号:
我尝试过以下操作:
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
答案 0 :(得分:3)
如果您使用的是Linux / Unix / Windows(可能还有其他人),我认为您只需要NEXT VALUE FOR sequence
。在这种情况下,您不需要从sysdummy中额外选择。
INSERT INTO table1 (col1, col2)
SELECT col1, NEXT VALUE FOR col2_SEQ
FROM table2
答案 1 :(得分:1)
有三种方法可以在DB2中生成唯一值。
GENERATE_UNIQUE
功能IDENTITY
专栏SEQUENCE
object 假设col2_SEQ
的创建类似于以下声明:
CREATE SEQUENCE col2_SEQ
AS INTEGER
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
NO CYCLE
ORDER
insert语句可以写成如下:
INSERT INTO Table1 (col1, col2)
VALUES ((SELECT col1 FROM table2),
NEXT VALUE FOR col2_SEQ)
有关上述三种方法的更多信息,请参见here
答案 2 :(得分:0)
也许您应该将列指定为:
col2 smallint not null
generated by default as identity (start with 1, increment by 1)
和insert into table1 select col1, default from table2
答案 3 :(得分:0)
现在还有另一种语法,它在DB2 10.x中对我有用
INSERT INTO table1 (col1, col2)
SELECT col1, schema.seq_name.nextval
FROM table2;