sql - 如何使用递归数据批量更新表

标签 sql sql-server

我创建了一个临时表,其中在同一个表中包含具有新 ID 的重复行。所有都有必须根据旧 ID 进行更新的父 ID

创建的临时表具有字段(new_id、new_parentid、old_id、old_parentid) new_id、old_id 和 old_parentid 是通过批量插入插入的。

有人知道如何更新 New_Parent_Id 使其具有与旧的相同的结构吗?

declare @STARTNODE int

declare @tempTable table(New_Id int, New_Parent_Id int, Old_Id int, Old_Parent_Id int)

INSERT ORIGTABLE(OLD_GROUPID,OLD_GROUPPARENTID)
OUTPUT inserted.New_Id, inserted.Old_Id, inserted.Old_Parent_Id 
into @tempTable(New_Id,Old_Id,Old_Parent_Id)
SELECT a.ID, a.PARENT_ID FROM SHOP_ORIGTABLE a 
WHERE a.ID IN (SELECT ID FROM fn_allGroups(@STARTNODE))

其中函数 fn_allGroups 从层次结构中获取所有字段。

最佳答案

如果我正确理解了您的表结构,则在 @tempTable 上插入后,您必须运行此更新:

UPDATE a
SET a.new_parent_id = b.new_id
FROM @tempTable a
    INNER JOIN @tempTable b ON b.old_id = a.old_parent_id

关于sql - 如何使用递归数据批量更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993124/

相关文章:

sql - 从联合查询创建 View

sql - MySQL 创建并填充数据库

SQL Server 2012如何查看数据?

sql-server - 让 sp_tracegenerateevent 在存储过程中工作

mysql - 从 MS SQL Server 插入到 MySQL 数据库

mysql - 将 MySQL 数据导出到 CSV 文件时如何保留换行符?

mysql - 计算另一个计数值,但前提是它足够高

php - 如何在mySQL中将当前日期设置为默认日期

sql - 如何从另一个表中获取第一个表的行数?

sql - 简单数据库的 Access 与 Sql Server