0

以下のスクリプトで、SQL Merge を使用して 2 つのテーブルをマージしようとしています。

 BEGIN TRAN;
DECLARE @T TABLE(Id BigInt);
MERGE Target AS T
USING Source AS S
ON (T.ObjectName = S.ObjectName) 
WHEN NOT MATCHED BY TARGET 
     THEN INSERT(ObjectName,Value,[TimeStamp],Quality) VALUES(S.ObjectName, S.Value,S.[TimeStamp],S.Quality)
WHEN MATCHED 
    THEN UPDATE SET 
    T.Value = S.Value,
    T.Quality=S.Quality

OUTPUT S.Id INTO @T;
DELETE Source
WHERE Id in (SELECT Id
                     FROM @T);
if @@Error > 0
Rollback
else
COMMIT Tran
GO 

私がやろうとしているのは、 から に新しいレコードを挿入することです。"Target"レコードはテーブルで更新されます。私が直面している問題は、ソース テーブルに 2 つの同一の. スクリプト ロジックと私の要件によると、最初の を挿入する必要があり、次に 2 番目の「一致しない」は挿入ではなく更新として処理する必要があります。最初の記録。"Source""Matched""Source""Not Matched Rows""Not Matched""Matched"

私のマージは、スクリプトが 2 番目の同一の行に到達したときに最初の挿入が認識されない 1 つの一括スクリプトとして機能しているようです。これは「SQL Merge」の仕組みですか、それとも私のスクリプトからですか?

ありがとう

4

1 に答える 1