データ フロー タスクと OLE DB ソースを使用し、クエリをパラメーター化する必要がある場合:
- クエリステートメントの「完全」を保存する変数を作成します。パッケージの外側の空白の領域を右クリックし、[変数] をクリックします。

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

名前はSQL_DTFLOW_FULL
分かりやすいものにしてください。variable data type
は_STRING
- パラメータを保存する変数を作成します。
つまり、完全な Query stamements は次のとおりです。
SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter
上記のサンプルでは、@BookID というパラメーターが 1 つしかないため、パラメーターを保存するために 1 つの変数を作成する必要があります。クエリに応じて、さらに変数を追加します。

名前を付けますSQL_DTFLOW_BOOKID
variable data type
は_STRING
したがって、SSIS を適切に作成する必要があり、変数はわかりやすい部分に分類されます。
変数名を作成してみてくださいSQL_{TASK NAME}_{VariableName}
- 変数の式を作成し
SQL_DTFLOW_FULL
、番号 1 をクリックして、番号 2 の入力を開始します。文字列ブロックを使用して、SQL ステートメントを正しい SQL ステートメントにします。通常、最初と最後に「二重引用符」を使用する文字列ブロック。変数を文字列ブロックと連結します。

[式の評価] をクリックして結果を表示し、クエリが正しいことを確認して、クエリ結果を SSMS にコピー アンド ペーストします。
独自のロジックを使用して、変数が SQL インジェクションから解放されていることを自分で確認してください。(開発者の直感を使ってください)
- データ フロー タスクを開き、項目をダブルクリックして OLE DB ソース エディターを開きます。

- データ アクセス モードを選択します。
SQL Command From Variable
- 変数名を選択します:
SQL_DTFLOW_FULL
- [プレビュー] をクリックして、動作することを確認します。
以上が、この SSIS 障害ケースを防ぐための私の方法です。私はこの方法を使用しているので、その問題は発生しませんでした。SSIS の何かがおかしいのです。
変数の値を変更するには、データ フロー タスクの前に設定しSQL_DTFLOW_FULL
ます。変数の値を変更するたびに、変数の SQL 結果が変更されます。