在我的项目中,我需要创建一个脚本,该脚本使用主键的自动生成值插入数据,然后在其他表上重复使用此数字。
我试图使用WITH语句来保持该值。
例如,我试图这样做:
WITH tmp as (SELECT ID FROM (INSERT INTO A ... VALUES ...))
INSERT INTO B ... VALUES tmp.ID ...
但我无法使其发挥作用。 是否至少可以这样做或者我完全错了???
谢谢
答案 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