使用前一次插入的ID进行插入。
使用前一次插入的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日
您可以使用@@IDENTITY来返回最后插入的标识,参见https://learn.microsoft.com/en-us/sql/t-sql/functions/identity-transact-sql。
在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以外的其他列,这可能很方便。