DB2使用with语句来保留最后一个id

时间:2017-09-09 18:00:23

标签: sql database db2 common-table-expression

在我的项目中,我需要创建一个脚本,该脚本使用主键的自动生成值插入数据,然后在其他表上重复使用此数字。

我试图使用WITH语句来保持该值。

例如,我试图这样做:

WITH tmp as (SELECT ID FROM (INSERT INTO A ... VALUES ...))
INSERT INTO B ... VALUES tmp.ID ...

但我无法使其发挥作用。 是否至少可以这样做或者我完全错了???

谢谢

2 个答案:

答案 0 :(得分:1)

是的,如果您的DB2服务器版本支持语法,则可能。

例如:

create table xemp(id bigint generated always as identity, other_stuff varchar(20));

创建表othertab(xemp_id bigint);

SELECT id FROM FINAL TABLE
    (INSERT INTO xemp(other_stuff)
     values ('a'), ('b'), ('c'), ('d')
    ) ;

上面的代码片段给出了以下结果:

ID                  
--------------------
                   1
                   2
                   3
                   4

  4 record(s) selected.

如果要重新使用ID来填充另一个表:

with tmp1(id) as ( SELECT id FROM new TABLE (INSERT INTO xemp(other_stuff) values ('a1'), ('b1'), ('c1'), ('d1') ) tmp3 )
, tmp2 as (select * from new table (insert into othertab(xemp_id) select id from tmp1 ) tmp4 )
select * from othertab;

答案 1 :(得分:0)

根据我的理解

您必须使用序列对象创建一个自动增量字段(此对象生成一个数字序列)。

您可以创建SEQUENCE以实现自动增量值:

CREATE SEQUENCE seq_person
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  CACHE 10