Tsc*_*eck 0 sql sql-server sql-insert
我有表 A 和表 B 具有多对多关系。表AB是链接表。
Table: Columns:
A { Id, Name }
AB { A_Id, B_Id }
B { Id, Name }
Run Code Online (Sandbox Code Playgroud)
我想将行插入到表 A 中,然后使用该行的 Id(Id 具有自动递增的标识)插入到链接表中。
是否可以在单个 SQL 命令中执行此操作?
示例(伪sql):
insert into A (Name) values (@name)
insert into AB (A_Id, B_Id) values ([previous id], @b_Id)
Run Code Online (Sandbox Code Playgroud)
在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;
Run Code Online (Sandbox Code Playgroud)
为什么output更安全?首先,它不依赖于事务或会话语义。它只是捕获实际插入的数据并使其可用于后续语句。
其次,它可以处理插入的多行(尽管在这种情况下这不是问题)。
第三,它可以返回除 id 之外的其他列,这很方便。
| 归档时间: |
|
| 查看次数: |
1961 次 |
| 最近记录: |