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

时间:2017-11-15 06:32:39

标签: sql db2 db2-luw

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

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

  1. 插入table1;
  2. 选择自动生成的字段ID;
  3. 使用table2;
  4. 插入ID
  5. 使用table2;
  6. 插入ID
  7. ......一些更类似的插页......
  8. 使用table2插入ID;
  9. 应该生成所有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。

1 个答案:

答案 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。