こんにちは。助けが必要です。これは私の最初の SSIS パッケージであり、使いながら学んでいます。これまでのところ、これが私の持っているものです。
制御フローを作成しました。次に、ソース用に 2 つ、宛先用に 1 つの計 3 つの ADO.Net 接続を作成しました。次に、あるデータベースのテーブルから同じサーバー上の別のデータベースの対応するテーブルにデータをコピーするデータ フロー タスクを作成しました。データ フロー タスクには、2 つの ADO NET ソースと ADO NET 宛先があります。宛先は、単にフィールドを一緒にマップするだけです。
さて、ここまでは順調です。これが私の問題です。ソース クエリの一部には日付条件があります。例は次のようになります。
SELECT --Code Here
WHERE CONVERT(varchar, call_date, 112) BETWEEN '6/1/2013' AND '7/1/2013'
これらのハードコードされた日付を変数に置き換えたいと思います。次のようになります:
WHERE CONVERT(varchar, call_date, 112) BETWEEN STARTDATE AND ENDATE
いくつかの投稿を読んで、説明されていることをやろうとしましたが、よくわかりません。私の例を使って、やり方を教えてください。パッケージを実行するときに日付の入力を求めるプロンプトが表示されると便利ですが、クエリに変数を渡す方法を知るだけでも非常に満足です。
これは私が知っている唯一の解決策です。私はSSISパッケージの初心者なので、誰かが助けてくれることを願っています。
ベストアンサー1
ここでの回答はどれも質問に対する答えではないので(ADO.NET ソース(OLE DB ではありません!)これが本当の答えです。
SSIS では、ADO.NET ソースをパラメーター化できません。回避策を使用する必要があります。
幸いなことに、回避策はいくつかあります。1 つは、ソースのように動作するスクリプト コンポーネントを作成してコード化することです。ただし、特に ADO.NET プログラミングの知識がない場合は、既存のリソースをスクリプトに簡単に変換できるとは限りません。
もう一つの回避策はSQLクエリを作成することです前にADO.NET ソースがアクションを実行します。ただし、ADO.NET ソースを開くと、データ アクセス モードで変数の入力が許可されていないことがわかります。では、どうすればよいでしょうか。
ADO.NETソースのSQL式を動的に設定したいので、データフロータスク式を使用して SSIS ADO.NET ソース コンポーネントを構成します。
長い話を短くするには(または、それほど短くはありませんが)、次のようにします。
- パッケージに、ソース/宛先コンポーネントを含むデータフロータスクを入力します。
- 背景の任意の場所をクリックすると、プロパティパネルにタスクのプロパティが表示されます。
- プロパティ パネルで、さまざまなデータ ソース/宛先プロパティを構成できる Expressions プロパティを見つけ、省略記号ボタン (...) を使用して開きます。
- プロパティで、ソースのSQLコマンドプロパティ(例:[ADO.NETソース].[SqlCommand])を選択して1行追加します。
- 行の省略記号ボタンをクリックして式ビルダーを開きます
- 式ビルダーで動的クエリを作成する
最後のステップは、date/datetime パラメータの場合、やや面倒になる可能性があります。ただし、便宜上、次の例を示します。
"SELECT * FROM YOUR_SOURCE_TABLE WHERE your_date_column = '" +
(DT_WSTR,4)YEAR(@[User::VAR_CONTAINING_DATE]) + "-" +
(DT_WSTR,2)MONTH(@[User::VAR_CONTAINING_DATE]) + "-" +
(DT_WSTR,2)DAY(@[User::VAR_CONTAINING_DATE]) + "'"
HTH