SQL 条件不合并的服务器 MERGE

SQL Server MERGE with conditions not merging

当收集器的数据与最终 table 不同时,我正在尝试对我的 table 进行简单更新。我正在使用下面的代码。当第一个 SELECT 运行时,它告诉我这两列中都有数据。 MERGE 语句运行后,我执行新的 SELECT,两列仍显示为 NULL。合并没有更新任何东西。

我是不是搞砸了 MERGE 语法?

我的生产代码还包括 WHEN NOT MATCHED 和其他项目。这只是一个演示问题的小例子。

SELECT l.Region_Name, l.Region_Code
FROM dbo.Collector_Locations l
WHERE l.id = 1038

MERGE INTO dbo.Locations AS T
USING dbo.Collector_Locations S ON T.id = S.id

WHEN MATCHED AND (T.Region_Name <> S.Region_Name OR T.Region_Code <> S.Region_Code)     
    THEN 
        UPDATE SET T.Region_Name = S.Region_Name,
                   T.Region_Code = S.Region_Code;

SELECT l.Region_Name, l.Region_Code
FROM dbo.Locations l
WHERE l.id = 1038

更改查询以适应 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;

除此之外,语法看起来还不错。这应该可以解决问题。

编辑:

不过,在这种情况下我会使用 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