我的脚本每天都使用合并语句几年,但是在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
可以防止重复错误。
我意识到我必须提供更多信息,所以如果你能告诉我如何调试这个,那就太棒了。
答案 0 :(得分:2)
临时表中有重复的条目
运行此查询以获取这些重复项
Select webmeterID, [DateTime]
From dbo.temp_energydata
Group by webmeterID, [DateTime]
Having count(*) > 1