我的SQL Server 2008 R2存儲過程中有以下代碼。在這個存儲過程中,我正在將一個城市複製到另一個城市,並與其家人和人物一起。在SQL Server 2008 R2中的MERGE語句中更新插入的記錄
這裏我在@FamilyIdMap
中維護家庭的來源和目標ID。
左欄指示代碼行號。
-- 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 <--
我知道問題出在代碼行
#1010> ParentID) OUTPUT
但我應該用ParentID
來代替它來更新它?提前致謝。
它按預期工作,非常感謝您的時間和精力:) –