使用插入的值作为其他插入的参数
Use inserted value as a parameter for other inserts
有一个带有两个表的 db2 数据库。第一个 table1
具有自动增量列 ID
。它是 table2
.
的外键
我正在为 SQL 查询编写一个 HTML 生成器。因此,对于一些输入参数,它会生成一个查询或多个查询。它没有连接到数据库。
我需要的是获取该自动增量字段并在下一个查询中使用它。
所以基本上,场景是:
- 插入
table1
;
- select 自动生成的字段
ID
;
- 使用
ID
; 插入 table2
- 使用
ID
; 插入 table2
- ...一些类似的插入...
- 使用
ID
插入 table2
;
并且应该生成所有 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.)
我可以只粘贴 select 而不是 $ID
,但是第二个查询可以多次使用相同的 $ID
和不同的值。
编辑:Linux.
上的 DB2 10.5
您可以使用 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;
这假设 LUW 的 Db2 是最新版本。
有一个带有两个表的 db2 数据库。第一个 table1
具有自动增量列 ID
。它是 table2
.
我正在为 SQL 查询编写一个 HTML 生成器。因此,对于一些输入参数,它会生成一个查询或多个查询。它没有连接到数据库。 我需要的是获取该自动增量字段并在下一个查询中使用它。 所以基本上,场景是:
- 插入
table1
; - select 自动生成的字段
ID
; - 使用
ID
; 插入 - 使用
ID
; 插入 - ...一些类似的插入...
- 使用
ID
插入table2
;
table2
table2
并且应该生成所有 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.)
我可以只粘贴 select 而不是 $ID
,但是第二个查询可以多次使用相同的 $ID
和不同的值。
编辑:Linux.
上的 DB2 10.5您可以使用 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;
这假设 LUW 的 Db2 是最新版本。