【发布时间】:2021-11-22 03:54:40
【问题描述】:
我正在尝试将数据从表 A 复制到表 B,然后将表 A 中的更新 FK 列插入到新插入的表 B Id。因为这些需要相关。
INSERT INTO TableB(ColA, ColB, ColC, ColD, ...)
SELECT a.ColA, a.ColB, a.ColC, a.ColD, ...
FROM TableA a for update;
update a set TableBId = (newly inserted id from table B)
在代码中以便更好地理解
foreach (var tableA in AllTableA)
{
TableB newB = new TableB(tableA);
AllTableB.Add(newB);
tableA.TableBId = newB.GetId();
}
我怎样才能在一笔交易中做到这一点?
【问题讨论】:
-
这能回答你的问题吗? Get the last inserted row ID (with SQL statement) 使用
SCOPE_IDENTITY()。或者对于多行,使用OUTPUT子句 -
for update在 SQL Server 中无效。必要时可以使用WITH (UPDLOCK) -
@Charlieface 否,因为我想从选择的每个插入表单中获取每个 Id,并从选择的每个插入中更新每个 Id,而不会丢失它们之间的关系。对于选择的每一行,我想与从所选行获取值的插入行创建一个关系。
-
在临时表或表变量中使用
OUTPUT子句,另见stackoverflow.com/questions/5228780/how-to-get-last-inserted-id -
是的,我明白这一点,但我从 600 个选定值中插入了 600 行,而不会失去彼此之间的连接。我可以通过一个简单的插入轻松地做到这一点,但我无法让它与带有 OUTPUT 的插入一起工作到选择和更新中,对于每一行。
标签: sql sql-server insert sql-update