sql - 根据新插入记录的主键更新记录的外键字段

标签 sql sql-server

对于表 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/

相关文章:

sql - SQL Server Case 语句中的条件和条件

sql - 在SQL Server中,如何在存储过程中传递可选参数?

sql - 如何在 sqlite 中创建物化 View ?

SQL Server : querying hierarchical and referenced data

sql-server - SQL Server 查询中的自定义总和

c# - 使用字符串生成器和大量参数构建 SQL 查询

sql-server - 从 SQL Server 中的多个表中获取两个日期之间的记录

sql - 使用 sql - 在 select 语句中不为 null

sql-server - Azure SQL 数据库 - 在存储过程中获取文件内容的正确方法

python - SQLAlchemy 一对一关系创建多行