使用前一次插入的ID进行插入。

21 浏览
0 Comments

使用前一次插入的ID进行插入。

这个问题已经有了答案:

如何获取插入行的标识符?

我有一个多对多关系的表A和表B,它们之间有一个关联表AB。

Table:  Columns:
A       { Id, Name }
AB      { A_Id, B_Id }
B       { Id, Name }

我想先插入一行到A表,然后使用该行的ID(ID具有自增的标识)插入到关联表中。

是否可能在单个SQL命令中完成它?

示例(伪SQL):

insert into A (Name) values (@name)
insert into AB (A_Id, B_Id) values ([previous id], @b_Id)

admin 更改状态以发布 2023年5月23日
0
0 Comments

您可以使用@@IDENTITY来返回最后插入的标识,参见https://learn.microsoft.com/en-us/sql/t-sql/functions/identity-transact-sql

0
0 Comments

在SQL Server中,最安全的做法是使用 output 子句,这在此处被解释:这里

declare @ids table (id int);
insert into A (Name)
    output inserted.id into @ids
    values (@name);
insert into AB (A_Id, B_Id) 
    select i.id, @b_Id
    from @ids i;

为什么 output 更安全?首先,它不依赖于事务或会话语义。它只是捕获实际插入的数据,并使其可用于随后的语句。

其次,它可以处理插入多行的情况(虽然在这种情况下不是问题)。

第三,它可以返回除了ID以外的其他列,这可能很方便。

0