質問

ユーザー入力パラメーターを受け取り、ODBC データソースに対して実行するレポートを Visual Studio で作成しています。クエリを手動で作成し、データベースに送信する前にレポート サービスで where 句の一部をパラメータ値に置き換えたいと考えています。何が起こっているように見えるかというと、 @parmName will be replace は実際には SQL ステートメントの一部として送信されると想定しています。どこかの構成設定が不足しているのでしょうか、それとも単に不可能なのでしょうか?

このツールのフィルター オプションはデータベースから完全なデータセットを戻し、SQL Server でフィルター処理を実行するように見えるため、使用しません。

役に立ちましたか?

解決

SQL ステートメントを式として扱う必要があるようです。例えば:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

where 句が文字列の場合は、次の操作を行う必要があります。

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

重要:SQL 式では改行を使用しないでください。実行するとエラーが発生します。

さらにサポートが必要な場合は、また来てください。

他のヒント

ODBCは古いものを使用しませんか?」パラメーターの構文?これを試して:

select col1, col2 from table1 where col3 = ?

その場合、パラメーターの順序が重要になりますが、単にパラメーター値を追加するよりも SQL インジェクションの影響を受けにくくなります。

ODBC 経由でアクセス データベースにクエリを実行しようとすると、同じ問題が発生しました。

私の元のクエリ: SELECT A.1 FROM A WHERE A.1 = @parameter エラーが発生しました。変更後の内容: SELECT A.1 FROM A WHERE A.1 = ?.

次に、クエリ パラメータをレポート パラメータにマップする必要があります。

この質問については少し混乱しています。単純なパラメータの使用法を探している場合、表記は次のとおりです。*paramName* ただし、構造的に変更したい場合は、 WHERE (SQL+ で ? を使用する場合と同じように) 句を使用する場合は、レポート内でカスタム コードを使用して、クエリに必要な SQL を返す関数を定義する必要があります。

残念ながら、カスタム コードを使用する場合、生成されたクエリでパラメータを直接参照することはできませんが、結果の文字列に値を連結する必要があるため、次のような問題が発生する可能性があります。 SQL 注射。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top