在SSRS中,当我进行新报告时,为什么会出现错误“已添加具有相同密钥的项目”?


68

我在出现以下错误SSRS

保存查询设计方法时发生错误。
具有相同键的项目已被添加

但是,“项目”代表什么?我什至尝试编辑RDL和删除对需要使用的存储过程的所有引用,称为prc_RPT_Select_BI_Completes_Data_View

这可能与存储过程使用动态SQL(N' 表示法)有关吗?

在存储过程中,我有:

SET @SQL +=  N'
SELECT   bi.SupplierID as ''Supplier ID''
        ,bi.SupplierName as ''Supplier Name''

        ,bi.PID as ''PID''
        ,bi.RespondentID as ''Respondent ID''

        ,lk_slt.Name as ''Entry Link Type''

        ,ts.SurveyNumber as ''Initial Survey ID'''

在此处输入图片说明

Answers:


136

SSRS似乎有问题(至少在2008版中)-我正在研究解释该问题的网站

它说如果您有两个名称相同的列(来自2个差异表),则将导致该问题。

来自来源:

从表A中选择a.Field1,a.Field2,a.Field3,b.Field1,b.field99 a.Field1 = b.Field1上的JOIN TableB b

SQL可以很好地处理它,因为我给每个前缀都添加了别名(表)名。但是SSRS仅使用列名作为键,而不使用表+列,因此很令人讨厌。

修复很容易,可以将第二列重命名为iebField1 AS Field01,也可以完全忽略该字段,这就是我所做的。


2
如果SP / SQL返回重复的列名,则会出现相同的问题。因为SSRS的主要问题是在这种情况下会引发错误。
Aftab Ansari 2013年

7
在2012
。– wilsjd 2013年

2
@wilsjd可能是因为这些工具来自2007年。在人们继续研究其他东西之前,MS确实需要将该产品与该产品结合在一起。
Yuck

1
如果忘记提供多个字段名称(例如计算所得的字段),则会出现此问题。SQL返回“ No column name”,SSRS对名为“ No column name”的两个字段不满意。与重复的列名完全相同,但是花了我更长的时间才发现。
MsTapp

2
问题仍然适用于SSRS 2016,我将同一列错误地选择了两次,并出现此错误。
柯克,

7

我过去曾遇到过这个问题。基于此,我可以说,如果您的数据集具有指向相同字段源的多个字段名,通常会出现此问题。查看以下帖子以获取详细的错误描述

http://www.bi-rootdata.com/2012/09/an-error-occurred-during-report.html

http://www.bi-rootdata.com/2012/09/an-item-with-same-key-has-already-been.html

对于您的情况,应该检查Sp prc_RPT_Select_BI_Completes_Data_View返回的所有字段名称,并确保所有字段都具有唯一名称。


1
如果同一存储过程中可能存在重复字段怎么办?那可能吗?
Caffeinated

2
如果SP将返回重复的字段,并且您将所有字段与报告字段绑定,则将遇到相同的问题。
Aftab Ansari

5

我面临着同样的问题。调试后,我修复了相同的问题。如果您的sql查询中的列名有多次,则会发生此问题。因此,在sql查询中使用别名来更改列名。例如:以下查询将在sql查询中正常运行,但会在SSRS报告中产生问题:

从PersonalDetails中选择P.ID,P.FirstName,P.LastName,D.ID,D.City,D.Area,D.Address P左加入CommunicationDetails D On P.ID = D.PersonalDetailsID

原因:ID两次提及(多次)

正确查询:

选择P.ID作为PersonalDetailsID,P.FirstName,P.LastName,D.ID,D.City,D.Area,D.Address来自PersonalDetails P左加入CommunicationDetails D On P.ID = D.PersonalDetailsID


3

我在报表查询中遇到了相同的错误。我有来自不同表的列,这些列具有相同的名称和每个表的前缀(例如:select a.description,b.description,c.description),这些列在Oracle中运行正常,但是对于报表,您必须为每个表拥有唯一的别名列,因此只需将别名添加到具有相同名称的字段(选择a.description a_description,b.description b_description等)


1

我刚遇到这个错误,我才知道这与局部变量别名有关

在存储过程结束时,我喜欢

select @localvariable1,@localvariable2

它在sql中工作正常,但是当我在ssrs中运行它时,总是抛出错误,但是在给了别名后,它是固定的

select @localvariable1 as A,@localvariable2 as B

1

抱歉,它是对旧线程的响应,但可能仍然有用。

除了上述响应之外,当同一查询中甚至包含来自不同表的两个具有相同名称的列时,通常也会发生这种情况。例如,如果我们加入两个表city和state,其中表的列名称例如city.name和state.name。当将这样的查询添加到数据集时,ssrs删除表名或表别名并仅保留名称,最终在查询中出现两次,并作为重复键出错。避免这种情况的最佳方法是使用别名,例如将列名city.name称为c_name state.name称为s_name。这样可以解决问题。


1

我在vs2015,ssdt 14.1.xxx,ssrs中收到此错误消息。对我来说,我认为这与上述第2列相同名称的问题有所不同。我添加了此报告,然后删除了该报告,然后当我尝试在ssrs向导中重新添加查询时,收到以下消息:“在保存查询设计方法时发生错误:无效的对象名:表名”。其中tablename是向导正在读取的查询上的表。我尝试清理项目,尝试重建项目。我认为,当您删除报告时,Microsoft不会完成清理报告,只要您尝试将原始查询添加回去,就不会添加。我能够解决的方法是在一个全新的项目中创建ssrs报告(显然查询没有问题)并将其保存到一边。然后,我重新打开了原始的ssrs项目,右键单击Reports,然后单击Add,然后添加Existing Item。报告添加得很好,没有名称冲突。


-1

如果您使用的是SP,并且sps具有多个Select语句(在条件内),则所有这些选择都需要使用唯一的字段名进行处理。


-1

SSRS不会接受重复的列,因此请确保您的查询或存储过程返回唯一的列名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.