複数のトランザクション

Integration Services パッケージでは、関連しないトランザクションをパッケージに含めることができます。入れ子になったコンテナ階層の中間にあるコンテナでトランザクションがサポートされない場合、階層の上位または下位にあるコンテナがトランザクションをサポートするように構成されている場合はそのコンテナで別個のトランザクションが開始されます。トランザクションは、入れ子になったコンテナ階層において最も内側のタスクから順にパッケージにコミットまたはロールバックされます。ただし、内側のトランザクションがコミットされた後、その外側のトランザクションが中止された場合は、内側のトランザクションをロールバックできません。

たとえば、パッケージにシーケンス コンテナが含まれていて、このコンテナは、それぞれの 2 つの SQL 実行タスクを含む 2 つの Foreach ループ コンテナを保持しているとします。シーケンス コンテナはトランザクションをサポートします。Foreach ループ コンテナはトランザクションをサポートしません。SQL 実行タスクはトランザクションをサポートします。この例で、それぞれの SQL 実行タスクは、独自のトランザクションを開始し、シーケンス タスクのトランザクションが中止された場合にもロールバックしません。

この場合、シーケンス コンテナの TransactionOption プロパティ、Foreach ループ コンテナ、および SQL 実行タスクを次のように設定します。

  • シーケンス コンテナの TransactionOption プロパティを [Required] に設定します。

  • Foreach ループ コンテナの TransactionOption プロパティを [NotSupported] に設定します。

  • SQL 実行タスクの TransactionOption プロパティを [Required] に設定します。

次の図は、パッケージ内の 5 つの関連しないトランザクションを示しています。1 つのトランザクションはシーケンス コンテナによって開始され、4 つのトランザクションは SQL 実行タスクによって開始されます。

複数のトランザクションの実装