シーケンス コンテナー内に 2 つの SSIS スクリプト タスクがあります。で変数を宣言StartTime
しましたScript Task 1
。でこの変数を使用したいScript Task 2
。
StartTime
内の変数にアクセスすることは可能Script Task 2
ですか? 変数にアクセスするにはどうすればよいですか?
シーケンス コンテナー内に 2 つの SSIS スクリプト タスクがあります。で変数を宣言StartTime
しましたScript Task 1
。でこの変数を使用したいScript Task 2
。
StartTime
内の変数にアクセスすることは可能Script Task 2
ですか? 変数にアクセスするにはどうすればよいですか?
SSIS パッケージで変数を作成するときに、変数のスコープを定義できます。このスコープは、制御フローのどのタスクが変数に対して可視性を持つかを定義します。
サンプルの SSIS パッケージを次に示します。
シーケンス コンテナーとその中に 2 つのスクリプト タスクを含むパッケージを作成しました。異なるスコープで 4 つの変数を作成しました。
異なるスコープで定義されたすべての変数を表示する場合は、ペインの 4 番目のボタンをチェックする必要がありますVariables
。このオプションは、スクリーンショットの矢印で示されています。
これらの各スコープで変数がどのように機能するかを次に示します。
StartTime_Package
- この変数はMyPackage
、たまたまパッケージ名でもある scope の下で宣言されています。これは最上位のスコープです。この変数は、制御フローのすべてのタスクに表示されます。
StartTime_Sequence
- この変数はSequence Container
、シーケンス コンテナー タスクの名前である scope の下で宣言されます。この変数は、シーケンス コンテナーとシーケンス コンテナー内のタスクにのみ表示されます。
StartTime_Task1
- この変数はScript Task 1
、シーケンス コンテナー内の最初のスクリプト タスクの指定された名前である scope の下で宣言されます。この変数は、最初のスクリプト タスクにのみ表示され、他のタスクには表示されません。
StartTime_Task2
- この変数はScript Task 2
、シーケンス コンテナー内の 2 番目のスクリプト タスクの指定された名前である scope の下で宣言されます。この変数は、2 番目のスクリプト タスクにのみ表示され、他のタスクには表示されません。
特定のタスクが変数にアクセスできるかどうかを識別する簡単な方法を次に示します。変数ペインの 3 番目のオプションのチェックを外しましょう。
をクリックしScript Task 1
ます。変数StartTime_Task2
は表示されていないため、[変数] ペインに表示されてScript Task 1
いません。
同様に、タスクをクリックして、アクセスできる変数を確認できます。
要件に基づいて、変数のスコープを決定する必要があります。タスク間で変数の値を共有する場合は、最上位のパッケージ レベルのスコープで宣言するのが安全です。
特定のタスクの外部で特定の変数にアクセスしないことが確実な場合は、そのタスクのスコープ レベルで宣言しても安全です。
スクリプト タスクをダブルクリックすると、スクリプト タスク エディターが表示されます。変数値を読み取るだけか、タスク内で変更するかを決定する必要があります。変数値を変更し、その値をメッセージ ボックスに表示します。そのためには、パッケージで既に宣言されている変数を選択し、スクリプト タスクに読み取りおよび書き込みアクセスを提供する必要があります。ReadWriteVariables
プロパティに対して省略記号ボタンをクリックします
[変数の選択] には、スクリプト タスクがアクセスできる変数 (システム レベルとユーザー レベルの両方) が一覧表示されます。変数を選択しStartTime_Package
ます。
変数がプロパティにリストされていることがわかります。複数の変数を選択できます。[スクリプトの編集] をクリックして、変数に値を書き込んで読み取るように C# コードを変更できるようにします。
次のコードをスクリプト タスクに貼り付けます。最初の行は値を割り当てます。ここでは、今日の日付に 7 日を加算しています。2 行目は、変数の値をメッセージ ボックスに表示します。
public void Main()
{
Dts.Variables["StartTime_Package"].Value = DateTime.Now.AddDays(7);
MessageBox.Show(Dts.Variables["StartTime_Package"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
}
パッケージを実行すると、メッセージ ボックスに値が表示されます。パッケージは 2012 年 11 月 1 日に実行され、パッケージが 2012 年 11 月 8 日の変更された値を表示していることがわかります。
SSIS 内の変数のスコープについてのアイデアが得られることを願っています。