本文介绍了合并声明SSIS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我在SSMS上测试了此代码 使用合并dim_BTS AS Target( SELECTA。 BTS,D.idVille 来自广播A 内部联接dbo.DIM_AXE_GEO D ON A.Ville = D.Villle )AS Source ON Source.BTS =匹配后的Target.BTS 更新 SET Target.idVille = Source.idVille; 向我显示此错误能否请你帮我该怎么办?解决方案您的源子查询是返回具有相同 BTS (您用来连接目标的列)的重复行,这 MERGE 语句是不允许的。 / p> 您可以使用 ROW_NUMBER()优化查询以仅过滤每个 BTS 的最新行。 )在CTE中的功能 与CTE_Source AS ( SELECT A. BTS,D.idVille,ROW_NUMBER()超过(按A.BTS排序或按d.idVille DESC排序)RN-选择您偏好的顺序从播出A 内部联接dbo.DIM_AXE_GEO D ON A.Ville = D.Villle )使用合并dim_BTS AS目标( SELECT * FROM CTE_Source WRN RN = 1 )AS Source ON Source防弹少年团=匹配后的Target.BTS 然后更新 SET Target.idVille = Source.idVille; 或者如果需要插入多行BTS,则在加入时需要在ON子句上添加更多列达到目标。 I tested this code on SSMS Merge dim_BTS AS Target using( SELECT A.BTS, D.idVille FROM onAir A INNER JOIN dbo.DIM_AXE_GEO D ON A.Ville = D.Villle) AS Source ON Source.BTS = Target.BTSWHEN MATCHED THENUPDATESET Target.idVille = Source.idVille;show me this error Can you please help me what can I do ? 解决方案 Your Source sub-query is returning duplicate rows with same BTS (column You use to join on target) which is not allowed for MERGE statement.You can refine your query to filter only the latest row for each BTS using ROW_NUMBER() function in CTEWITH CTE_Source AS( SELECT A.BTS, D.idVille, ROW_NUMBER() OVER (PARTITION BY A.BTS ORDER BY d.idVille DESC) RN -- choose order of your preference FROM onAir A INNER JOIN dbo.DIM_AXE_GEO D ON A.Ville = D.Villle)Merge dim_BTS AS Target using( SELECT * FROM CTE_Source WHERE RN=1) AS Source ON Source.BTS = Target.BTSWHEN MATCHED THENUPDATESET Target.idVille = Source.idVille;Or if multiple row BTS needs to be inserted, you need to add more columns on ON clause when joining on target. 这篇关于合并声明SSIS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!