使用 INSERT table (A) 的返回值到另一个 table (B)

Use a returning value from an INSERT table (A) into another table (B)

我需要使用TableA的返回值(ID)作为参数插入到TableB中:

insert into tableA (ID, Name , Address) 
values (GEN_ID(GENERATOR,1),'John','123 street') 
returning ID
--Example: ID=159
    
insert into tableB (ID, TABLE_A_FK ) 
  values (GEN_ID(GENERATOR,1), 159) 

我可以不输入实际值159,而是像变量一样创建(例如declare ID int;),然后只传递参数吗?

在单个语句中执行此操作的唯一方法是使用 EXECUTE BLOCK(基本上是匿名 one-off 过程)。它使用与 Firebird 中的普通存储过程相同的语法。

你可以这样做:

execute block
as
  declare id integer;
begin
  insert into tableA (ID, Name , Address) 
    values (GEN_ID(GENERATOR,1), 'John', '123 street') 
    returning ID
    into id;

  insert into tableB (ID, TABLE_A_FK) 
    values (GEN_ID(GENERATOR,1), :id);
end

如有必要,execute block 语句可以参数化,因此您可以使用参数来提供值(而不是对它们进行硬编码)。有关详细信息,请参阅上面的 link。