有一个带有两个表的db2数据库。第一个table1
具有自动增量列ID
。它是table2
的外键。
我正在为SQL查询编写HTML生成器。因此,对于某些输入参数,它会生成查询或多个查询。它未连接到数据库。 我需要的是获取该自动增量字段并在下次查询中使用它。 所以基本上,情景是:
table1
; ID
; table2
; ID
table2
; ID
table2
插入ID
; 应该生成所有SQL查询,然后将其用作单个SQL脚本。
我在考虑这样的事情:
SELECT ID FROM FINAL TABLE (INSERT INTO Table1 (t1column1, t1column2, etc.)
VALUES (t1value1, t1value2, etc.))
但我不知道,如何将结果写入变量,以便我可以在下一个查询中使用它:
INSERT INTO Table2 (foreignKeyCol, t2column1, t2column2, etc.)
VALUES ($ID, t2value1, t2value2, etc.)
我可以粘贴该选择而不是$ID
,但第二个查询可以使用相同的$ID
和不同的值多次使用。
编辑:Linux上的DB2 10.5。
答案 0 :(得分:2)
您可以使用CTE将多个插入链接在一起,如下所示:
WITH idcte (id) as (
SELECT ID FROM FINAL TABLE (
INSERT INTO Table1 (t1column1, t1column2, etc.)
VALUES (t1value1, t1value2, etc.)
)
),
ins1 (id) as (
SELECT foreignKeyCol FROM FINAL TABLE (
INSERT INTO Table2 (foreignKeyCol, t2column1, t2column2, etc.)
SELECT id, t2value1, t2value2, etc.
FROM idcte
)
),
-- more CTEs
SELECT foreignKeyCol FROM FINAL TABLE (
-- your last INSERT ... SELECT FROM
)
基本上,您必须将每个INSERT
打包成SELECT FROM FINAL TABLE
才能生效。
或者,您可以使用全局变量来保留ID值:
CREATE VARIABLE myNewId INT;
SET myNewId = (SELECT ID FROM FINAL TABLE (
INSERT INTO Table1 (t1column1, t1column2, etc.)
VALUES (t1value1, t1value2, etc.)
));
INSERT INTO Table2 (foreignKeyCol, t2column1, t2column2, etc.)
VALUES (myNewId, t2value1, t2value2, etc.);
DROP VARIABLE myNewId;
这假设最新版本的Db2用于LUW。