バッチ実行環境と MARS

Microsoft SQL Server 2005 以降では、接続で MARS (複数のアクティブな結果セット) のサポートを有効にできます。このような接続には、既定のバッチ実行環境が関連付けられます。

このバッチ実行環境は、次のコンポーネントから構成されます。

  • SET オプションの値 (ANSI_NULLS、DATE_FORMAT、LANGUAGE、TEXTSIZE など)

  • セキュリティ コンテキスト (バッチ実行環境のユーザー ロールまたはアプリケーション ロール)

  • データベース コンテキスト (環境の現在のデータベース)

  • 実行状態関数 (@@ERROR、@@ROWCOUNT、@@FETCH_STATUS、@@IDENTITY など)

  • 最上位レベルの一時テーブル

特定の接続の実行を開始するすべての新しいバッチは、既定の環境のコピーを受け取ります。バッチが実行されるたびに、実行環境に加えられたすべての変更のスコープがその特定のバッチに設定されます。実行が完了すると、実行設定が既定の環境にコピーされます。複数のコマンドが順番に実行される単一のバッチの場合、その動作は以前のリリースの SQL Server のクライアントまたはサーバーに関係する接続で行われる動作と同じになります。

以前のバージョンの SQL Server では、実行できるバッチは常に 1 つだけです。したがって、あるバッチによってバッチ環境に加えられた変更は、その後のすべてのバッチに反映されます。

ストアド プロシージャと関数の場合は、バッチの既定の環境が接続の既定の環境になりますが、実行が完了しても、接続の既定のバッチ実行環境に変更はコピーされません。

たとえば、次の 2 つのバッチを実行するとします。

--First Batch
SET ARITHABORT ON
SET ANSI_WARNINGS ON
SELECT 1/0
GO
--Second Batch
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT 1/0
GO

また、既定の実行環境を備えた接続では MARS が有効になっていて、SET ARITHABORT が OFF、SET ANSI_WARNINGS が ON にそれぞれ設定されているものとします。

この接続で両方のバッチが同時に実行されると、これらのバッチの実行は、接続の既定のバッチ環境の設定で開始されます。実行中は、一方のバッチの環境の変更がもう一方のバッチの変更に影響を与えないように、これらの環境にスコープが設定されます。バッチの実行が完了すると、完了時の環境が接続の既定の環境にコピーされます。最終的な接続の既定の環境は、最後に実行を完了したバッチによって決まります。この環境が、次に実行されるバッチで使用されます。