Я пытаюсь объединить две таблицы с помощью SQL Merge в следующем скрипте:
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"
на "Source"
, и записи "Matched"
будут обновлены в "Source"
таблице. Проблема, с которой я сталкиваюсь, заключается в том, что иногда в исходной таблице есть два одинаковых "Not Matched Rows"
. В соответствии с логикой скрипта и моим требованием он должен вставить первый "Not Matched"
, тогда второй «Not Matched» нужно будет рассматривать как обновление, а не как вставку, поскольку теперь это строка "Matched"
, потому что мы уже вставил первую запись.
Кажется, что мое слияние работает как один массовый скрипт, где первая вставка не замечается, когда скрипт достигает второй идентичной строки. Так работает «SQL Merge» или это мой скрипт?
Спасибо