こんにちは、私はいくつかの助けが必要ですこれは私の最初の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パッケージの初心者なので、誰かが私を助けてくれることを願っています
ここでの回答はどれも実際に質問に答えていないため(ADO.NETソースではなく、OLE DB!)に注意してください)、実際の答えは次のとおりです。
SSISでは、ADO.NETソースをパラメーター化できません。回避策を使用する必要があります。
幸いなことに、回避策はほとんどありません。 1つは、ソースのように動作し、それをコーディングするスクリプトコンポーネントを作成することです。ただし、既存のリソースをスクリプトに簡単に変換できるとは限りません。特に、ADO.NETプログラミングの知識がない場合はそうではありません。
別の回避策があります。それは、SQLクエリを作成することですbefore ADO.NETソースがアクションを実行します。ただし、ADO.NETソースを開くと、データアクセスモードでは変数の入力が許可されないことがわかります。それでは、どのように進めますか?
ADO.NETソースのSQL式を動的に設定するため、データフロータスクにExpressionを使用してSSIS ADO.NETソースコンポーネントを構成するように指示する必要があります。
長い話を短くする(または非常に短い:)するには、次のようにします。
最後のステップは、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
[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を追加してください...
それを実行します。
OLE DB Apporach:
パッケージのパラメーターをいくつか作成します。必須にする場合、それらは必須であり、パッケージは値なしでは実行されません。 [値]列のフィールドはデフォルトであり、デバッグに使用されます。
次に、変数を作成して式を追加します。
式エディターは、C#のウォッシュアウトバージョンを使用します(興味がある場合)
また、変数間の文字列にスペースを追加するようにしてください見にくいですが、どちらかの側にスペースがあります:
「AND」
忘れそうだった。 yorパラメータの値は「singleQuotes」にする必要があります。これは、次の2つの方法のいずれかで実行できます。文字列に値を指定するときに引用符を含めるか、式に引用符を追加することができます(通常は何をしますか)。
式にそれらを追加すると、次のようになります。
"some stuff " + "'" + @[variable] + "'"
式を評価をクリックして、変数が正しい文字列を保持しているかどうかを確認します。
最後のステップは、OLE DBソースを追加し、接続を設定します(まだ接続していない場合))、変数からクエリを追加します。