MERGE声明在工作2年后失败

时间:2014-10-27 22:05:20

标签: sql sql-server-2008 tsql merge

我的脚本每天都使用合并语句几年,但是在10月6日它停止了工作并且发出错误:

  

Msg 8672,Level 16,State 1,Line 1
  MERGE语句尝试多次更新或删除同一行。当目标行与多个源行匹配时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。优化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可以防止重复错误。

我意识到我必须提供更多信息,所以如果你能告诉我如何调试这个,那就太棒了。

1 个答案:

答案 0 :(得分:2)

临时表中有重复的条目

运行此查询以获取这些重复项

  Select webmeterID, [DateTime]
  From dbo.temp_energydata
  Group by webmeterID, [DateTime]
  Having count(*) > 1