これを行うことができる方法を次に示します。以下のサンプルではSSIS 2012
.
最小および最大の日付範囲を含む 2 つの変数があるが、それらは数値形式で格納されており、これらの値が日付規則に従う必要があるとします。
次の変数を宣言します。
MinInteger
- このデータ型の変数は、日付の最小値を数値形式でInt32
格納します。SSIS 2012 を使用している場合は、実行時に値を簡単に構成できるように、これをパラメーターとして作成することをお勧めします。
MaxInteger
- このデータ型の変数は、日付の最大値を数値形式でInt32
格納します。SSIS 2012 を使用している場合は、実行時に値を簡単に構成できるように、これをパラメーターとして作成することをお勧めします。
MinString
- このデータ型の変数は、数値形式の日付の最小String
値を文字列に変換するため、値を分割して日付形式を作成する作業が簡単になります。式を(DT_WSTR, 10) @[User::MinInteger]
MaxString
- このデータ型の変数は、数値形式の日付の最大String
値を文字列に変換するため、値を分割して日付形式を作成する作業が簡単になります。式を(DT_WSTR, 10) @[User::MaxInteger]
MinDate
- このデータ型の変数はDateTime
、最小日付の文字列値を分割して日付値を作成します。この変数の式を次のように設定します。
(DT_DATE)(SUBSTRING(@[User::MinString], 1, 4) + "-" + SUBSTRING(@[User::MinString], 5, 2) + "-" + SUBSTRING(@[User::MinString] ]、7、2))
MaxDate
- このデータ型の変数はDateTime
、最大日付の文字列値を分割して日付値を作成します。この変数の式を次のように設定します。
(DT_DATE)(SUBSTRING(@[User::MaxString], 1, 4) + "-" + SUBSTRING(@[User::MaxString], 5, 2) + "-" + SUBSTRING(@[User::MaxString] ]、7、2))
SSIS 2008 R2 またはそれ以前のバージョンを使用している場合は、上記の最後の 4 つの変数の EvaluateAsExpression プロパティをTrueに設定する必要があります。
Loop
- このデータ型の変数はDateTime
、For ループ コンテナー内の日付値をループするために使用されます。
以下に示すように、For ループ コンテナーを構成します。
- 初期式:
@[User::Loop]=@[User::MinDate]
- 評価式:
@[User::Loop]<=@[User::MaxDate]
- 代入式:
@[User::Loop]=DATEADD("dd", 1, @[User::Loop])
このサンプルでは、値を 1 日ずつ増やしますが、これは必要に応じて構成できます。DATEPARTとインクリメント番号を別の変数/パラメーターに格納して、構成を簡単にすることもできます。
サンプル パッケージの実行を説明するために、For ループ内にスクリプト タスクを配置しました。スクリプト タスクには変数 User::Loop が ReadOnlyVariables に設定されており、次の C# コードが含まれています。
public void Main()
{
MessageBox.Show(string.Format("Current loop variable value: {0}", Dts.Variables["Loop"].Value.ToString()));
Dts.TaskResult = (int)ScriptResults.Success;
}
MinInteger
が20120229にMaxInteger
設定され、20120302に設定されている場合、パッケージは実行中に次の値を表示します。
それが役立つことを願っています。