2017-06-07 12 views
0

私のSSRSレポートビルダーでは、私のデータセットの1つに式が設定されています(名前はdsTagAttributesです)。クエリの種類はテキストです。SSRSで式Query.CommandTextを正しく設定する方法は?

これは、上記のクエリ式は、SELECT文に連結されたパラメータを持つクエリ式

="select m.TagName, ta.descriptor, t.[State] from MasterTags m inner join TagAttributesClassic ta on m.ID = ta.TagID inner join TagStates t on t.ID = m.StateID where m.PIServerID = @ServerID and t.[State] = @State and m.MetaData1 = @Station " & Parameters!AndOr.Value & "m.MetaData2 = @Device" 

enter image description here

です。

データタイプはテキストで、デフォルト値は "or"で、パラメータの可視性は非表示に設定されています(下記のスクリーンショット)。このパラメータは、レポート実行時にデータセットの結果をorからandに動的に変更するために使用されるため、このパラメータを設定しました。

enter image description here

しかし、私はレポートを実行すると、例外がスローされると言って、
私のクエリコマンドテキストで間違って行くことができる何 enter image description here

ご協力いただきまして誠にありがとうございます。

答えて

0

データソースに対してプロファイラを実行して、クエリを表示できます。

それぞれのvarchar値の前後に「 '」がないことが問題だと思います(@State@Station)。

私はあなたがちょうどあなたがビジネスロジックに応じて、正しく')''('を置くことを確認してください

... 
    AND 
    (m.MetaData2 = @Device AND @OrAnd = 'AND') 
) 
    OR 
    (m.MetaData2 = @Device AND @OrAnd = 'OR') 

ようTSQLを変更することができOrAnd条件

を使用するためにその方法を使用することはありません。

+0

あなたは正しいです。私は '@ State'、' @ Station'と '@ Device'パラメータを一重引用符で囲むことに失敗しました。私はssrsクエリビルダーが自動的にそれを処理すると思ったので、パラメータはテキストのタイプです。そして、あなたの提案に感謝します。あなたのアプローチとOrAnd条件を使用する利点は何ですか? – Juniuz

+0

これは私のコーディングスタイルです。私は頻繁にクエリプランが良かったことに気付き、コンパイルする必要なしにクエリキャッシュに格納することができました。私にとっては、このようなアプローチは読みやすくなっています。しかし、それは大きな問題ではないので、あなたのアプローチがうまくいけばそれを使うことができます。 – Anton

関連する問題