我有临时表 -
CREATE TABLE #TempMain(
A int,
B int,
C int
)
我运行以下插入只是查询一次只是为了填充#TempMain
insert into #TempMain
SELECT
A,
B,
C
FROM dbo.entity where RequestId = 1241 and ClassId = 25 and type=102
之后我使用Merge语句 -
MERGE #TempMain AS Target
USING (
SELECT
A,
B,
C
FROM dbo.entity where RequestId = 1241 and ClassId = 25 and type=102
) AS Source ON (Target.B= Source.B AND Target.C= Source.C)
WHEN MATCHED THEN
UPDATE SET Target.A= Source.A
WHEN NOT MATCHED BY Target THEN
INSERT (A,B,C)
VALUES (Source.A,Source.B,Source.C);
select * from #temp1
当我运行此合并语句查询时,我收到错误 -
MERGE语句尝试多次更新或删除同一行。当目标行与多个源行匹配时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多匹配一个源行,或使用GROUP BY子句对源行进行分组。
我无法理解代码中的问题。我寻找其他类似的错误,我仍然无法解决这个问题。
答案 0 :(得分:0)
我无法理解代码中的问题。
很明显,B, C
中#TempMain
的数据不是唯一的,当然dbo.entity
中也存在相同的行。因此,在连接的情况下,您将获得笛卡尔积,并且来自目标(以及来自源)的相同行不仅存在。因此,此UPDATE SET Target.A= Source.A
将多次更新同一行。