【发布时间】:2021-04-29 23:51:41
【问题描述】:
MERGE PFM_EventPerformance_MetaData AS TARGET
USING
(
SELECT
[InheritanceMeterID] = @InheritanceMeterPointID
,[SubHourlyScenarioResourceID] = @SubHourlyScenarioResourceID
,[MeterID] = @MeterID--internal ID
,[BaselineID] = @BaselineID--internal ID
,[UpdateUtc] = GETUTCDATE()
)
AS SOURCE ON
TARGET.[SubHourlyScenarioResourceID] = SOURCE.[SubHourlyScenarioResourceID]
AND TARGET.[MeterID] = SOURCE.[MeterID]--internal ID
AND TARGET.[BaselineID] = SOURCE.[BaselineID]--internal ID
WHEN MATCHED THEN UPDATE SET
@MetaDataID = TARGET.ID--get preexisting ID when exists (must populate one row at a time)
,InheritanceMeterID = SOURCE.InheritanceMeterID
,[UpdateUtc] = SOURCE.[UpdateUtc]
WHEN NOT MATCHED
THEN INSERT
(
[InheritanceMeterID]
,[SubHourlyScenarioResourceID]
,[MeterID]--internal ID
,[BaselineID]--internal ID
)
VALUES
(
SOURCE.[InheritanceMeterID]
,SOURCE.[SubHourlyScenarioResourceID]
,SOURCE.[MeterID]--internal ID
,SOURCE.[BaselineID]--internal ID
);
在上述查询中,如果旧值没有变化,我不想更新目标表中的值。我不确定如何实现这一点,因为我很少使用 Merge 语句。请帮我解决问题。提前致谢
【问题讨论】:
-
你不能只给
WHEN MATCHED AND someconditionhere THEN UPDATE添加一个条件吗? -
你能给我一些示例代码吗@Charlieface
-
我刚做了。但我不确定你想要什么,不清楚。如果您愿意,
WHEN MATCHED可以有一个额外的条件。我们可以这样做,例如:WHEN MATCHED AND target.InheritanceMeterID <> source.InheritanceMeterID AND target.UpdateUtc <> source.UpdateUtc THEN UPDATE SET... -
谢谢这是我需要的@Charlieface
标签: sql sql-server tsql sql-merge