10

Oracle OLE DB プロバイダーを使用してパラメーター付きの SQL クエリを入力しようとすると、次のエラーが発生します。

パラメータは SQL コマンドから抽出できません。プロバイダーは、コマンドからのパラメーター情報の解析に役立たない場合があります。その場合は、SQL コマンド全体が変数に格納される「変数からの SQL コマンド」アクセス モードを使用します。
追加情報:
プロバイダーはパラメーター情報を取得できず、SetParameterInfo が呼び出されていません。(Microsoft OLE DB Provider for Oracle)

ここの提案に従ってみましたが、何が必要なのかよくわかりません: Oracleに対するパラメータ化されたクエリ

何か案は?

4

3 に答える 3

18

質問で与えられたリンクを拡張するには:

  1. パッケージ変数を作成する
  2. パッケージ変数名をダブルクリックします。(これにより、変数のプロパティにアクセスできます)
  3. プロパティ'EvaluateAsExpression'をtrueに設定します
  4. 式ビルダーにクエリを入力します。
  5. OLEDBソースクエリを変数からのSQLコマンドに設定します

式ビルダーは、変数を使用して式を動的に作成し、「パラメーター化されたクエリ」を作成できます。
したがって、次の「通常の」クエリ:

select * from book where book.BOOK_ID = ?

式ビルダーでは、次のように記述できます。

"select * from book where book.BOOK_ID = " + @[User::BookID]

その後、式ビルダーを使用してnull処理とデータ変換を行うことができます。

于 2008-09-12T14:24:12.083 に答える
1

データ フロー タスクと OLE DB ソースを使用し、クエリをパラメーター化する必要がある場合:

  1. クエリステートメントの「完全」を保存する変数を作成します。パッケージの外側の空白の領域を右クリックし、[変数] をクリックします。

変数

[変数] ウィンドウで [変数の追加] をクリックします。

ここに画像の説明を入力

名前はSQL_DTFLOW_FULL分かりやすいものにしてください。variable data typeは_STRING

  1. パラメータを保存する変数を作成します。

つまり、完全な Query stamements は次のとおりです。

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

上記のサンプルでは、​​@BookID というパラメーターが 1 つしかないため、パラメーターを保存するために 1 つの変数を作成する必要があります。クエリに応じて、さらに変数を追加します。

ParamAdd

名前を付けますSQL_DTFLOW_BOOKID

variable data typeは_STRING

したがって、SSIS を適切に作成する必要があり、変数はわかりやすい部分に分類されます。

変数名を作成してみてくださいSQL_{TASK NAME}_{VariableName}

  1. 変数の式を作成しSQL_DTFLOW_FULL、番号 1 をクリックして、番号 2 の入力を開始します。文字列ブロックを使用して、SQL ステートメントを正しい SQL ステートメントにします。通常、最初と最後に「二重引用符」を使用する文字列ブロック。変数を文字列ブロックと連結します。

表現

[式の評価] をクリックして結果を表示し、クエリが正しいことを確認して、クエリ結果を SSMS にコピー アンド ペーストします。

独自のロジックを使用して、変数が SQL インジェクションから解放されていることを自分で確認してください。(開発者の直感を使ってください)

  1. データ フロー タスクを開き、項目をダブルクリックして OLE DB ソース エディターを開きます。

データフロー

  • データ アクセス モードを選択します。SQL Command From Variable
  • 変数名を選択します:SQL_DTFLOW_FULL
  • [プレビュー] をクリックして、動作することを確認します。

以上が、この SSIS 障害ケースを防ぐための私の方法です。私はこの方法を使用しているので、その問題は発生しませんでした。SSIS の何かがおかしいのです。

変数の値を変更するには、データ フロー タスクの前に設定しSQL_DTFLOW_FULLます。変数の値を変更するたびに、変数の SQL 結果が変更されます。

于 2018-07-20T10:25:29.710 に答える