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