过滤WHEN MATCHED无法按预期工作

时间:2017-07-18 17:26:08

标签: sql sql-server

MERGE [TenantSync].[ReportingSync] AS MyTarget
USING [TenantSync].[ReportingSyncStage] AS MySource
ON MySource.[TenantID] = MyTarget.[TenantID] AND MySource.[ServiceID] = MyTarget.[ServiceID]
WHEN MATCHED AND [MyTarget].[Modified] <> MySource.[Modified]
    THEN UPDATE SET [FTOP_EntitlementCount] = MySource.FTOP_EntitlementCount, Modified = MySource.Modified 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT ([TenantID], [ServiceID], [FTOP_EntitlementCount], [Modified]) 
        VALUES (MySource.[TenantID], MySource.[ServiceID], MySource.[FTOP_EntitlementCount], MySource.[Modified])
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE

我意识到我正在将所有行从MySource更新到MyTarget,即使修改日期没有改变,所以我添加了“AND [MyTarget]。[Modified]&lt;&gt; MySource。[Modified]”到WHEN匹配期望它更新修改日期不匹配的记录。我将ReportingSync中的所有修改日期设置为null。运行合并语句,它会快速处理,没有受影响的记录。

想法?

1 个答案:

答案 0 :(得分:0)

不是&#34;是&#34; NULL <> 'some non-null value'

当使用ANSI NULLS(SQL Server的默认设置)时,关于NULL的唯一事情就是IS NULL