我的 SQL Server 2008 R2 存储过程中有以下代码。在该存储过程中,我将一个城市及其家人和人员复制到另一个城市。
在这里,我将家庭的源和目标 id 维护在@FamilyIdMap
.
左栏表示代码行号。
-- Copy Person
1> DECLARE @PersonIdMap table (TargetId int, SourceId int)
2> MERGE Person as PersonTargetTable
3> USING (SELECT PersonID, FamilyID, PersonName, ParentID FROM Person
4> WHERE FamilyID in (SELECT FamilyID from Family where FamilyName like '%DA%'))
5> AS PersonSourceTable ON (0=1)
6> WHEN NOT MATCHED THEN
7> INSERT(FamilyID, PersonName, ParentID)
8> VALUES
9> ((SELECT TOP 1 TargetID from @FamilyIdMap WHERE SourceID=FamilyID),PersonName,
10> ParentID) OUTPUT
11> INSERTED.PersonID, PersonSourceTable.PersonID
12> INTO @PersonIdMap;
它给出这样的输出:
源表
PersonID FamilyID PersonName ParentID
1 1 ABC Null
2 1 Son of ABC 1
3 1 Son of ABC 1
4 2 XYZ NULL
5 2 Son of XYZ 4
目标表(使用上面给出的代码从源表复制)
PersonID FamilyID PersonName ParentID
6 1 ABC Null
7 1 Son of ABC 1 <-- ParentID Remains as it is
8 1 Son of ABC 1 <--
9 2 XYZ NULL
10 2 Son of XYZ 4 <--
上面输出中的问题是它没有更新parentID
,我希望输出是这样的:
预期目标表
PersonID FamilyID PersonName ParentID
6 1 ABC Null
7 1 Son of ABC 6 <-- ParentID should be updated
8 1 Son of ABC 6 <--
9 2 XYZ NULL
10 2 Son of XYZ 9 <--
我知道问题出在代码的第 10 行
10> ParentID) OUTPUT
但是我应该用什么ParentID
来更新它?提前致谢。