【发布时间】:2020-01-24 17:37:46
【问题描述】:
在 SQL MERGE 上,如何插入“什么都不做”类型的语句?例如,我现在有这个:
MERGE INTO dbo.Worker AS T
USING dbo.Collector_Worker AS S
ON T.WWID = S.WWID
WHEN MATCHED THEN UPDATE SET
T.IDSID = S.IDSID,
...
WHEN NOT MATCHED THEN
INSERT (WWID, IDSID, ...)
VALUES (S.WWID, S.IDSID, ...)
WHEN NOT MATCHED BY SOURCE THEN
UPDATE SET T.Person_Status_Type = 'INACTIVE', T.Active = 0;
... 字符所在的其他列还有很多。所以这很好用,除了它更新已经存在的每一行,即使没有变化。由于该表中有一百万行,因此需要进行大量不必要的修改。如果进行了更改,我只想更新该行。
如果我尝试在ON 语句中添加一个AND T.IDSID <> S.IDSID,那么它将失败,因为它现在尝试运行INSERT 语句。
【问题讨论】:
标签: sql sql-server sql-server-2017 sql-merge