【问题标题】:MERGE statement failing after 2 years of working工作 2 年后 MERGE 语句失败
【发布时间】: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 可以防止重复错误。

我知道我将不得不提供更多信息,所以如果你能告诉我如何调试它,那就太好了。

【问题讨论】:

  • 临时表中有重复项,即webmeterIdDateTime 具有相同值的两条(或更多条)记录。
  • 谢谢,你有找到副本的脚本想法吗?

标签: sql sql-server-2008 tsql merge


【解决方案1】:

您的临时表中有重复的条目

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

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

【讨论】:

  • 谢谢,你们知道了,我找到了。
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2018-02-02
  • 2015-07-07
  • 2019-01-26
  • 1970-01-01
相关资源
最近更新 更多