我的脚本每天都使用merge语句已有几年了,但是在10月6日,它停止工作并抛出错误:
消息8672,级别16,状态1,行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
可以防止重复错误。
我意识到我将不得不提供更多的信息,因此,如果您可以让我知道如何进行调试,那将会很棒。
您的临时表中有重复的条目
运行此查询以获取那些重复项
Select webmeterID, [DateTime]
From dbo.temp_energydata
Group by webmeterID, [DateTime]
Having count(*) > 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句