74

我收到以下错误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'''

在此处输入图像描述

4

9 回答 9

144

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

它说如果你有两列(来自 2 个不同的表)具有相同的名称,那么它会导致这个问题。

从来源:

从表 A 中选择 a.Field1、a.Field2、a.Field3、b.Field1、b.field99 a 在 a.Field1 上加入表 B b = b.Field1

SQL 处理得很好,因为我为每个都添加了一个别名(表)名称。但是 SSRS 只使用列名作为键,而不是表 + 列,所以它很窒息。

修复很简单,要么将第二列重命名为 iebField1 AS Field01,要么一起省略该字段,这就是我所做的。

于 2013-01-22T20:49:19.433 回答
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 返回的所有字段名称,并确保所有字段都具有唯一名称。

于 2013-01-23T07:51:21.183 回答
6

我面临同样的问题。调试后我修复了同样的问题。如果 SQL 查询中的列名有多次,则会出现此问题。因此,在 SQL 查询中使用别名来区分列名。例如:以下查询将在 sql 查询中正常工作,但在 SSRS 报告中创建问题:

Select P.ID, P.FirstName, P.LastName, D.ID, D.City, D.Area, D.Address
From PersonalDetails P
Left Join CommunicationDetails D On P.ID = D.PersonalDetailsID

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

正确查询:

Select P.ID As PersonalDetailsID, P.FirstName, P.LastName, D.ID, D.City, D.Area, D.Address
From PersonalDetails P
Left Join CommunicationDetails D On P.ID = D.PersonalDetailsID
于 2018-04-20T06:36:59.430 回答
5

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

于 2018-08-09T17:37:03.533 回答
3

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

除了上述响应之外,这通常发生在同名的两列(即使来自不同的表)包含在同一个查询中时。例如,如果我们连接两个表 city 和 state,其中表具有列名,例如 city.name 和 state.name。当这样的查询被添加到数据集中时,SSRS 会删除表名或表别名,只保留名称,最终在查询中出现两次,并作为重复键出现错误。避免它的最好方法是使用别名,例如将列名 city.name 称为 c_name state.name 称为 s_name。这将解决问题。

于 2019-10-04T01:05:49.833 回答
2

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

于 2020-06-03T23:48:04.617 回答
1

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

于 2020-07-19T09:23:34.020 回答
1

我刚收到这个错误,我才知道这是关于局部变量别名

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

select @localvariable1,@localvariable2

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

select @localvariable1 as A,@localvariable2 as B
于 2017-06-06T14:55:58.423 回答
-1

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

于 2020-07-17T10:48:04.737 回答