2017-08-21 4 views
1

単一列のIN演算子を使用してSSRSでデータセットをフィルタリングしようとしています。複数の値を追加すると失敗します。パラメータが動作していないSQL IN演算子を使用するSQL Serverレポートビルダー3

これは、新しい問題に焦点を当てるために他のフィルタを除いた私のSQL文です。

SELECT * FROM vActivityDetailed WHERE Category IN (@Category)

@categoryは、データセットのプロパティ下オーバーライド発現によって影響されます。

=Split(Parameters!Category.Value, ",") 

代わりの複数値パラメータを使用して、私は単一の値としてこれを扱い、分割を行うことにより、SSRSは次のように実行しなければならないことを願っています。

C#の - ASP.NETコード

string categoryString = "Expenses, Misc, Accounts-Receivable"; 
paramPayType.Name = "Category"; 
paramPayType.Values.Add((categoryString!= "" ? categoryString : null)); 

SSRS最終的なSQLが実行される(予想)

SELECT * FROM vActivityDetailed WHERE Category IN ('Expenses', 'Misc', 'Accounts-Receivable') 

私はSQL Server Management Studioを使用してSQL上で直接これをテストしてきたので、私は知っています上記のSQLはレコードを返すので動作するはずですが、SSRSで適用すると失敗しますAn error has occurred during report processing. (rsProcessingAborted)

+0

アプリケーションからサーバーに送信されたSQLクエリテキストをトレースしようとしましたか? – niktrs

+0

@niktrsクエリのテキストがSQLレポートサーバー上に生成され、ASP.NETアプリケーション内にある唯一のコントロールがパラメータを送信しているため、意味が分かりません。送信前に各パラメータの値を見ることができますが、それ以降は、各パラメータが送信されたことを示すSQLレポートサーバーのデータベースのエラーログが表示され、エラーログに正しく表示されます。 –

答えて

2

SSRSのパラメータ値は、マルチプレ値が選択されます。 Split関数は引数として単一の文字列をとります。配列にSplitを使用することはできません。 SQL ServerのSSRSは値の分割を処理するので、パラメータをそのまま渡すだけで済みます。

何らかの理由で実際に値を分割する必要がある場合は、カスタムSQL関数を使用することをお勧めします。あなたが検索を実行すると、多くの例があります。

+0

彼は、パラメータをまったく変更する必要はありません。あなたの "オーバーライド式"を削除し、それは動作するはずです。 – Lucky

+0

あなたは正しいです。私は過去数時間にわたってこれをテストしていましたが、IN文では動作しない@Categoryパラメータをどのように構築しても問題ないと考えました。私はマルチバリューの作品を使いこなしていることを理解しました。今は、カテゴリが提供されていない場合に、すべての作業を行う方法を見つけようとしています。答えをありがとう。 –

関連する問題