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

时间:2011-02-14 14:11:30

标签: 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从层次结构中获取所有字段。

1 个答案:

答案 0 :(得分:4)

如果我正确理解了你的表的结构,在@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