我正在尝试使用基于表 B 的主 ID 的生成器从具有 5 条记录的查询 A 插入表 B,我们将其称为 GEN_B,这样它们就不会重复表 B 中的 ID。
TableB 有(ID,nameB,lastnameB)。 QueryA(5条记录)是这里的选择查询:
Insert Into TableB (ID, nameB, lastnameB)
SELECT
GEN_ID(GEN_B,1), Name, LastNAme
FROM
Table123
left join .....
left join.....
where...
为什么当我运行“Insert into Select...”时,我只看到 1 条记录被插入到 TAbleB 中,而不是 select QueryA 中的 5 条记录?是发电机的原因吗?不是每次都更新插入的记录吗?我需要为此创建一个执行块吗?如果有的话有什么想法吗?谢谢
不要在插入语句中显式指定要使用的生成器值,而是使用触发器在添加任何新行时自动使用生成器中的下一个值,而不指定 ID 列的值。
CREATE TRIGGER trgB_BI for B
active before insert position 0
as
begin
if ((new.ID is null) or (new.ID = 0)) then
begin
new.ID = gen_id(GEN_B, 1);
end
end