Изменение запроса для размещения значений NULL:
MERGE dbo.Locations AS T
USING dbo.Collector_Locations S
ON T.id = S.id
WHEN MATCHED AND (ISNULL(T.Region_Name,'a') <> S.Region_Name OR ISNULL(T.Region_Code,'a') <> S.Region_Code) THEN UPDATE SET
T.Region_Name = S.Region_Name,
T.Region_Code = S.Region_Code;
Кроме того, синтаксис выглядит нормально. Это должно сработать.
РЕДАКТИРОВАТЬ:
Я бы однако go для оператора UPDATE в этом сценарии:
UPDATE dbo.Locations
SET T.Region_Name = S.Region_Name,T.Region_Code = S.Region_Code
FROM dbo.Locations T
INNER JOIN dbo.Collector_Locations S
ON T.id = S.id AND (T.Region_Name <> S.Region_Name OR T.Region_Code <> S.Region_Code)
Вы также может принять наш последний набор условий соединения, поскольку ожидаемый конечный результат будет таким же:
UPDATE dbo.Locations
SET T.Region_Name = S.Region_Name,T.Region_Code = S.Region_Code
FROM dbo.Locations T
INNER JOIN dbo.Collector_Locations S
ON T.id = S.id