web-dev-qa-db-ja.com

ADO.NET Source SSISでパラメーターを渡す方法

こんにちは、私はいくつかの助けが必要ですこれは私の最初のSSISパッケージであり、私は行くにつれて学んでいます。これまでのところ、これは私が持っているものです。

制御フローを作成しました。次に、2つのソース用と1つの宛先用の3つのADO.Net接続を作成しました。次に、1つのデータベースのテーブルから同じサーバー上の別のデータベースの対応するテーブルにデータをコピーするデータフロータスクを作成しました。データフロータスクには、2 ADO NET SourceおよびADO NET Destination。宛先は単にフィールドを一緒にマップします。

さて、これまでのところとても良い。これが私の問題です。一部のソースクエリには日付の基準があります。例は次のとおりです。

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パッケージの初心者なので、誰かが私を助けてくれることを願っています

21
CMinor

ここでの回答はどれも実際に質問に答えていないため(ADO.NETソースではなく、OLE DB!)に注意してください)、実際の答えは次のとおりです。

SSISでは、ADO.NETソースをパラメーター化できません。回避策を使用する必要があります。

幸いなことに、回避策はほとんどありません。 1つは、ソースのように動作し、それをコーディングするスクリプトコンポーネントを作成することです。ただし、既存のリソースをスクリプトに簡単に変換できるとは限りません。特に、ADO.NETプログラミングの知識がない場合はそうではありません。

別の回避策があります。それは、SQLクエリを作成することですbefore ADO.NETソースがアクションを実行します。ただし、ADO.NETソースを開くと、データアクセスモードでは変数の入力が許可されないことがわかります。それでは、どのように進めますか?

ADO.NETソースのSQL式を動的に設定するため、データフロータスクにExpressionを使用してSSIS ADO.NETソースコンポーネントを構成するように指示する必要があります。

長い話を短くする(または非常に短い:)するには、次のようにします。

  • パッケージで、ソース/宛先コンポーネントとともにデータフロータスクを入力します
  • 背景の任意の場所をクリックして、タスクパネルのプロパティをプロパティパネルに表示します
  • [プロパティ]パネルで、さまざまなデータソース/宛先プロパティを構成できる[式]プロパティを見つけ、省略記号ボタン(...)を使用して開きます。
  • [プロパティ]で、ソースの[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

38

[ソースタイプソリューションとしてのADO.NET]

ステップ1使用する各パラメーターの変数を作成します。

enter image description here

ステップ2クエリを実行する[制御フロー]タブでタスクを選択します

ステップ3このタスクのプロパティに移動し、[...]ボタンをクリックして式を選択します。

enter image description here

ステップ4コマンドプロパティを選択し、[...]ボタンをクリックします enter image description here

ステップ5ここで、ステップ1で定義した変数を含むクエリをここで作成できます。完了したら保存します。楽しい!

3
Kay Tsar

[OK]をここで私はそれを行う方法です。

制御フローで、SQL実行タスクを作成します。 DB接続をセットアップします。 SQLStatmentで次のようにします。

select getdate() -1 startDate , getdate() endDate

一般タブのResultSetを単一行に設定します。 [結果セット]タブに移動し、[追加]をクリックします。StartDateなどの結果名を指定し、新しい変数を追加します。

Name: startDate  (must be the same name as the alius in the select)
Namespace: user 
type:  DateTime
Value:  02-09-2013

これを実行すると、ユーザー変数に現在の日付と昨日の日付を入力する必要があります。 EndDateから同じことを行います

2番目のSQL実行タスクを作成し、最初のタスクにリンクします。このSQLステートメントを追加します。 ?あなたの変数になります

select stuff
WHERE CONVERT(varchar, call_date, 112) BETWEEN ? AND ?

Paramaterマッピングに移動します。ひとつ追加

Variable Name should be something like User::StartDate 
Direction Input
Datetype: Nvarchar
Parameter name: 0 
Parameter size: 0

2つ目を追加

Variable Name should be something like User::EndDate 
Direction Input
Datetype: Nvarchar
Parameter name: 1
Parameter size: 0

3番目のパラメータを追加するときは、パラメータ名2を追加してください...

それを実行します。

1
DaImTo

OLE DB Apporach:

パッケージのパラメーターをいくつか作成します。必須にする場合、それらは必須であり、パッケージは値なしでは実行されません。 [値]列のフィールドはデフォルトであり、デバッグに使用されます。

enter image description here

次に、変数を作成して式を追加します。

enter image description here

enter image description here

式エディターは、C#のウォッシュアウトバージョンを使用します(興味がある場合)

また、変数間の文字列にスペースを追加するようにしてください見にくいですが、どちらかの側にスペースがあります:

「AND」

忘れそうだった。 yorパラメータの値は「singleQuotes」にする必要があります。これは、次の2つの方法のいずれかで実行できます。文字列に値を指定するときに引用符を含めるか、式に引用符を追加することができます(通常は何をしますか)。

式にそれらを追加すると、次のようになります。

"some stuff " + "'" + @[variable] + "'"

式を評価をクリックして、変数が正しい文字列を保持しているかどうかを確認します。

最後のステップは、OLE DBソースを追加し、接続を設定します(まだ接続していない場合))、変数からクエリを追加します。

enter image description here

0
TsSkTo