web-dev-qa-db-ja.com

SSRSで、新しいレポートを作成しているときに、「同じキーを持つアイテムが既に追加されています」というエラーが表示されるのはなぜですか?

SSRSに次のエラーが表示されていますが、しばらく困惑しています。

An error occurred while the query design method was being saved. 
An item with the same key has already been added

ただし、「アイテム」とは何を意味しますか? 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'''

enter image description here

60
Coffee

SSRSに問題があるようです(少なくともバージョン2008では)-私は勉強しています それを説明するこのウェブサイト

同じ名前の2つの列(2つのdiff。テーブルから)がある場合は、その問題が発生します。

ソースから:

SELECT a.Field1、a.Field2、a.Field3、b.Field1、b.field99 FROM TableA a JOIN TableB b on a.Field1 = b.Field1

私はそれぞれにエイリアス(テーブル)名を付けていたので、SQLはそれをうまく処理しました。しかし、SSRSは列名のみをキーとして使用し、テーブル+列ではないため、窒息していました。

修正は簡単で、2番目の列の名前を変更しました。つまり、b.Field1 AS Field01にするか、フィールドを一緒に省略します。

116
Coffee

私は過去にこの問題を経験しました。それに基づいて、データセットに同じフィールドソースを指す複数のフィールド名がある場合、一般的にこの問題が発生すると言うことができます。詳細なエラーの説明については、以下の投稿をご覧ください

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によって返されるすべてのフィールド名を確認し、すべてのフィールドが一意の名前を持っていることを確認する必要があります。

6
Aftab Ansari

私は同じ問題に直面しています。デバッグ後、同じ問題を修正しました。 SQLクエリの列名が複数回ある場合、この問題が発生します。したがって、SQLクエリでエイリアスを使用して列名を変更します。例:以下のクエリはSQLクエリでは正常に機能しますが、SSRSレポートに問題が発生します。

PersonalDetailsからP.ID、P.FirstName、P.LastName、D.ID、D.City、D.Area、D.Addressを選択しますP Left Join CommunicationDetails D On P.ID = D.PersonalDetailsID

理由:IDが2回言及している(複数回)

正しいクエリ:

PersonalDetailsIDからP.ID、P.FirstName、P.LastName、D.ID、D.City、D.Area、D.Addressを選択します。PersonalDetailsPから左へCommunicationDetails Dに参加します。

3
Sanjay Kumar

レポートクエリでも同じエラーが発生しました。 Oracleでokを実行する各テーブル(たとえば、a.description、b.description、c.descriptionを選択)に同じ名前とプレフィックスを持つ異なるテーブルの列がありましたが、レポートにはそれぞれに一意のエイリアスが必要です列は、同じ名前のフィールドにエイリアスを追加するだけです(a.description a_description、b.description b_descriptionなどを選択します)

このエラーが発生したばかりで、ローカル変数のエイリアスに関するものであることがわかりました

ストアドプロシージャの最後に私が好きだった

select @localvariable1,@localvariable2

それはSQLでは正常に機能していましたが、これをssrsで実行すると常にエラーがスローされましたが、エイリアスを指定した後は修正されています

select @localvariable1 as A,@localvariable2 as B
0
Naveen Bodapati