【发布时间】:2012-12-04 06:37:11
【问题描述】:
我的 SQL Server 2008 R2 存储过程中有以下代码。在该存储过程中,我将一个城市及其家人和人员复制到另一个城市。
这里我在@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 <--
我知道问题出在代码的第 10 行
10> ParentID) OUTPUT
但是我应该用ParentID 替换什么来更新它?提前致谢。
【问题讨论】:
标签: stored-procedures sql-server-2008-r2 merge-statement