MERGE未按预期合并数据

时间:2012-10-04 00:19:55

标签: sql-server-2008 tsql merge

我在MERGE运行中的第一次尝试不是通过任何错误,但它没有像我想要的那样合并数据。谁能告诉我我做错了什么?重点是#Temp和#tblCollectionGameList并更新#tblCollectionGameList,以便它只包含#Temp中的项目(将缺少的项目插入tblCollecitonGameList并从tblColletionGameList中删除不再在#Temp中的项目)

    CREATE TABLE #Temp
(
    CollectionID smallint NOT NULL,
    IncludedSectionID smallint NOT NULL
)

INSERT INTO #Temp (CollectionID, IncludedSectionID) VALUES(0, 0);
INSERT INTO #Temp (CollectionID, IncludedSectionID) VALUES(0, 1);

SELECT * FROM #Temp;

CREATE TABLE #tblCollectionGameList
(
    ID smallint IDENTITY(0,1) NOT NULL,
    CollectionID smallint NOT NULL,
    IncludedSectionID smallint
)

INSERT INTO #tblCollectionGameList (CollectionID, IncludedSectionID) VALUES(0,0);
INSERT INTO #tblCollectionGameList (CollectionID, INcludedSectionID) VALUES(0,2);

SELECT * FROM #tblCollectionGameList;

BEGIN TRAN

MERGE #tblCollectionGameList AS t
USING #Temp AS s
ON (t.CollectionID = s.CollectionID)
WHEN NOT MATCHED BY TARGET
    THEN
        INSERT(CollectionID, IncludedSectionID) VALUES (s.CollectionID, s.IncludedSectionID)
WHEN NOT MATCHED BY SOURCE
    THEN
        DELETE;

SELECT * FROM #tblCollectionGameList;

ROLLBACK TRAN

DROP TABLE #Temp;
DROP TABLE #tblCollectionGameList;

1 个答案:

答案 0 :(得分:0)

您的问题是您正在加入一个非唯一列。

所有内容都有CollectionID = 1,因此所有内容都匹配 - 没有符合NOT MATCHED BY TARGET条件的行,并且没有符合NOT MATCHED BY SOURCE条件的行。

而是尝试在表格中使CollectionID唯一。

INSERT INTO #Temp (CollectionID, IncludedSectionID) VALUES(0, 0);
INSERT INTO #Temp (CollectionID, IncludedSectionID) VALUES(1, 1);

INSERT INTO #tblCollectionGameList (CollectionID, IncludedSectionID) VALUES(0,0);
INSERT INTO #tblCollectionGameList (CollectionID, INcludedSectionID) VALUES(2,2);