3

For Loop Container日付をInitExpression( @Load_Date ) として使用していますが、値は数値形式 (20120229) であり、変更できないため、そのようにする必要があります。

さて、 @Load_Date変数が日付なのでインクリメントできるようにAssingExpression値を設定したいと思います。つまり、変数@Load_Dateに割り当てられた数値20120229は、次の論理日付であるため、20120301にインクリメントする必要があります。

SSIS パッケージの For ループ コンテナー内でこれを実現するにはどうすればよいですか?

4

2 に答える 2

8

これを行うことができる方法を次に示します。以下のサンプルでは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;
}

MinInteger20120229MaxInteger設定され、20120302に設定されている場合、パッケージは実行中に次の値を表示します。

それが役立つことを願っています。

出力 1

アウトプット 2

アウトプット 3

于 2012-11-06T21:11:57.907 に答える
2

ループ ドライバーを日付として保存して、日付演算を実行できるようにし、その日付に基づく式によって駆動される変数を使用して、内部使用に必要な形式にします。

于 2012-11-06T20:49:40.277 に答える