SQL Server2008R2ストアドプロシージャに次のコードがあります。そのストアドプロシージャでは、ある都市を家族や人と一緒に別の都市にコピーしています。
ここでは、ファミリのソースIDとターゲット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
しかし、それを更新するには何に置き換える必要がありますか?前もって感謝します。