对于表 A 中的每条记录,我想根据表 B 中新插入记录的scope_identity 更新其中一个字段的外键值。
我需要在表 B 中为表 A 中的每条记录创建一条新记录,以便接收外键(scope_identity)值。
例如,对于下表中的每一行,我想基于在表 B 中创建新行/外键来更新空外键字段。
表A:
|Id|ForeignKey|
|1 |NULL |
|2 |NULL |
|3 |NULL |
|4 |NULL |
|5 |NULL |
作为伪代码,我想到了这样的sql:
update TableA
set ForeignKey = (INSERT INTO TableB VALUES (value1) select SCOPE_IDENTITY())
有什么想法吗?
最佳答案
您可以使用游标循环遍历 TableA 并创建记录:
DECLARE @Id int
DECLARE @ForeignKey int
DECLARE C CURSOR FOR SELECT Id FROM TableA
OPEN C
FETCH NEXT FROM C INTO @Id
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO TableB VALUES (value1)
SET @ForeignKey = SCOPE_IDENTITY()
UPDATE TableA
SET ForeignKey = @ForeignKey
WHERE Id = @Id
FETCH NEXT FROM C INTO @Id
END
CLOSE C
DEALLOCATE C
关于sql - 根据新插入记录的主键更新记录的外键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11710128/