1

MERGE 実行の最初の試みでは、エラーは発生していませんが、希望どおりにデータをマージしていません。誰が私が間違っているのか教えてもらえますか? ポイントは、#Temp と #tblCollectionGameList を比較し、#Temp 内のアイテムのみが含まれるように #tblCollectionGameList を更新することです (不足しているアイテムを tblCollecitonGameList に挿入し、もはや #Temp にないアイテムを tblColletionGameList から削除します)。

    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;
4

1 に答える 1

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);
于 2012-10-04T00:48:28.993 に答える