パッケージで変数を使用する
変数は、Integration Services パッケージに対する便利で柔軟な追加です。パッケージ内のオブジェクト間、および親パッケージと子パッケージ間の通信を提供できます。 また、変数は式やスクリプトでも使用できます。
ユーザー定義変数とシステム変数
Integration Services はシステム変数を提供し、ユーザー定義変数をサポートします。 新しいパッケージを作成したり、コンテナーまたはタスクをパッケージに追加したり、イベント ハンドラーを作成したりすると、Integration Services にはコンテナーのシステム変数のセットが含まれます。 システム変数には、パッケージ、コンテナー、タスク、またはイベント ハンドラーに関する有益な情報が含まれています。 たとえば、パッケージの実行時に、 MachineName システム変数にはパッケージを実行しているコンピューターの名前が含まれ、 StartTime にはパッケージの実行が開始された時刻が含まれます。 システム変数は読み取り専用です。 詳細については、「 システム変数」を参照してください。
ユーザー定義変数を作成して、パッケージで使用できます。 ユーザー定義変数は、SSIS のスクリプトでさまざまな方法で使用できます。優先順位制約、For ループ コンテナー、派生列変換、および条件付き分割変換で使用される式。および プロパティ値を更新するプロパティ式。
たとえば、For ループ コンテナーの評価条件でユーザー定義変数を使用できます。 また、Foreach ループ コンテナーの列挙子コレクション値を変数にマップしたり、SQL 実行タスクがパラメーター化された SQL ステートメントを使用する場合にステートメントのパラメーターを変数にマップしたりできます。 詳細については、「 Integration Services (SSIS) の変数」を参照してください。
変数の使用法のシナリオ
Integration Services パッケージでは、変数をさまざまな方法で使用します。 パッケージにユーザー定義変数を追加して、ソリューションに必要な柔軟性と管理性を実装しないと、パッケージ開発があまり進まない場合もあります。 シナリオによっては、システム変数もよく使用します。
プロパティの式 パッケージおよびパッケージ オブジェクトのプロパティを設定するプロパティ式に値を提供するために、変数を使用します。 たとえば、式 SELECT * FROM @varTableName
に含まれている変数 varTableName
は、SQL 実行タスクによって実行される SQL ステートメントを更新します。 式 DATEPART("d", GETDATE()) == 1? @[User::varPackageFirst]:@[User::varPackageOther]
では、 varPackageFirst
変数で指定されたパッケージを月の最初の日に実行し、 varPackageOther
変数で指定されたパッケージを別の日に実行することにより、[パッケージの実行] タスクで実行されるパッケージを更新しています。 詳細については、「 パッケージでプロパティ式を使用する」を参照してください。
データ フロー式 変数を使用して、派生列変換と条件分割変換で列に値を設定するための式や、データ行を各種の変換出力に送るための式に値を提供します。 たとえば、式 @varSalutation + LastName
は、 VarSalutation
変数の値と LastName
列を連結します。 式 Income < @HighIncome
は、Income
列の値が HighIncome
変数の値よりも小さいデータ行を出力に送信します。 詳細については、「派生列変換」、「条件分割変換」、および「Integration Services (SSIS) の式」を参照してください。
優先順位制約の式 優先順位制約で制約付き実行可能ファイルを実行するかどうかを決定するために使用する値を提供します。 これらの式は、実行結果 (成功、失敗、完了) と組み合わせて使用することも、実行結果の代わりに使用することもできます。 たとえば、式 @varMax > @varMin
が true
に評価される場合、実行可能ファイルは実行されます。 詳細については、「 優先順位制約に式を追加する」を参照してください。
パラメーターおよびリターン コード 入力パラメーターに値を提供したり、出力パラメーターおよびリターン コードの値を格納したりします。 そのためには、変数をパラメーターおよび戻り値にマップします。 たとえば、変数 varProductId
を 23 に設定して SQL ステートメント SELECT * from Production.Product WHERE ProductID = ?
を実行すると、 ProductID
が 23 である製品が取得されます。 詳細については、「 SQL 実行タスク 」と「 SQL 実行タスクのパラメーターとリターン コード」を参照してください。
For ループ式 For ループの初期化式、評価式、および代入式で使用する値を提供します。 たとえば、変数 varCount
が 2、変数 varMaxCount
が 10、初期化式が @varCount
、評価式が @varCount < @varMaxCount
、代入式が @varCount =@varCount +1
の場合、ループは 8 回繰り返されます。 詳細については、「 For ループ コンテナーに評価されるまでそのワークフローを繰り返します。
親パッケージ変数の構成 親パッケージから子パッケージに値を渡します。 子パッケージは、親パッケージ変数の構成を使用することにより、親パッケージの変数にアクセスできます。 たとえば、子パッケージが親パッケージと同じ日付を使用する必要がある場合、子パッケージは親パッケージの GETDATE 関数によって設定される変数を指定する親パッケージ変数の構成を定義できます。 詳細については、「 パッケージ実行タスク 」と「 パッケージ構成」を参照してください。
スクリプト タスクおよびスクリプト コンポーネント 読み取り専用変数および読み取り/書き込み変数の一覧をスクリプト タスクまたはスクリプト コンポーネントに提供し、スクリプト内の読み取り/書き込み変数を更新して、更新された値をスクリプトの内外で使用します。 たとえば、コード numberOfCars = CType(Dts.Variables("NumberOfCars").Value, Integer)
では、スクリプト変数 numberOfCars
が変数 NumberOfCars
の値によって更新されます。 詳細については、「 スクリプト タスクでの変数の使用」を参照してください。
構成と変数
変数を動的に更新するために、変数の構成を作成し、パッケージと共に構成を配置して、パッケージの配置時に構成ファイルの変数の値を更新できます。 実行時に、パッケージは更新された変数の値を使用します。 詳細については、「 パッケージ構成を作成する」を参照してください。