【发布时间】:2014-12-23 05:26:58
【问题描述】:
多年来,我的脚本每天都在使用合并语句,但在 10 月 6 日它停止工作并抛出错误:
消息 8672,第 16 级,状态 1,第 1 行
MERGE 语句多次尝试更新或删除同一行。当目标行匹配多个源行时会发生这种情况。 MERGE 语句不能多次 UPDATE/DELETE 目标表的同一行。优化 ON 子句以确保目标行最多匹配一个源行,或使用 GROUP BY 子句对源行进行分组。
我的脚本如下所示:
MERGE INTO dbo.energydata AS target
USING dbo.temp_energydata AS source ON target.webmeterID = source.webmeterID
AND target.DateTime = source.DateTime
WHEN MATCHED THEN
UPDATE
SET target.kWh = source.kWh
WHEN NOT MATCHED BY TARGET THEN
INSERT (webmeterID, DateTime, kWh)
VALUES (source.webmeterID, source.DateTime, source.kWh);
它基本上从 temp_table (temp_energydata) 中获取数据并将其与主表 (energydata) 合并。它使用合并是因为临时表每天都包含重复数据,MERGE 可以防止重复错误。
我知道我将不得不提供更多信息,所以如果你能告诉我如何调试它,那就太好了。
【问题讨论】:
-
临时表中有重复项,即
webmeterId和DateTime具有相同值的两条(或更多条)记录。 -
谢谢,你有找到副本的脚本想法吗?
标签: sql sql-server-2008 tsql merge