0
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]。[修改] <> MYSOURCE 。[Modified]“给WHEN MATCHED期望它更新修改日期不匹配的记录。我将ReportingSync中的所有修改日期设置为null。运行合并声明,并且它可以快速处理,不会受到任何影响过滤器时,匹配工作不正常
想法?
“NULL”不是一个值。试试这个([MyTarget]。[Modified] <> MySource。[Modified]或[MyTarget]。[Modified] IS NULL) – DVT
另外,请小心使用'MERGE'](https://www.mssqltips。 COM/sqlservertip/3074 /使用 - 谨慎 - 与-SQL服务器合并语句/)。大部分这些问题都没有得到解决,尽管今年我们会看到自从添加MERGE以来的第六个主要版本。 –
我习惯于处理空值,但我会期望比较两个字段以知道它们不匹配。我添加了OR [MyTarget]。[Modified] IS NULL,它立即填充Modified字段。我再次运行合并,并没有更新,这是非常好的。 – CubeRoot