使用插入的值作为其他插入的参数

Use inserted value as a parameter for other inserts

有一个带有两个表的 db2 数据库。第一个 table1 具有自动增量列 ID。它是 table2.

的外键

我正在为 SQL 查询编写一个 HTML 生成器。因此,对于一些输入参数,它会生成一个查询或多个查询。它没有连接到数据库。 我需要的是获取该自动增量字段并在下一个查询中使用它。 所以基本上,场景是:

  1. 插入 table1
  2. select 自动生成的字段 ID;
  3. 使用 ID;
  4. 插入 table2
  5. 使用 ID;
  6. 插入 table2
  7. ...一些类似的插入...
  8. 使用 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 是最新版本。