バッチ

更新 : 2005 年 12 月 5 日

バッチとは、SQL Server 2005 で実行するためにアプリケーションから同時に送信する 1 つ以上の Transact-SQL ステートメントをグループにしたものです。SQL Server では、バッチのステートメントが 1 つの実行単位 (実行プランと呼びます) にコンパイルされます。実行プランの中のステートメントは一度に 1 つずつ実行されます。

構文エラーなどのコンパイル エラーが発生すると、実行プランのコンパイルが停止します。したがって、バッチ内のステートメントは一切実行されません。

算術オーバーフロー、制約違反などのランタイム エラーが発生すると、次のいずれかの影響が現れます。

  • ほとんどのランタイム エラーでは現在のステートメントが停止し、バッチ内のそのステートメント以降のステートメントは実行されません。
  • 制約違反など、一部のランタイム エラーでは、現在のステートメントのみが停止します。バッチ内の残りのステートメントはすべて実行されます。

ランタイム エラーが発生したステートメントよりも前に実行されたステートメントは影響を受けません。ただし、バッチがトランザクション内で実行され、発生したエラーによってトランザクションがロールバックされる場合は例外です。その際は、ランタイム エラーが発生する前のコミットされていないデータ変更がロールバックされます。

たとえば、バッチ内に 10 個のステートメントがあるとします。5 番目のステートメントに構文エラーがある場合は、バッチ内のどのステートメントも実行されません。バッチがコンパイルされ、実行中に 2 番目のステートメントが失敗した場合は、最初のステートメントは実行済みであるためそのステートメントの結果は影響を受けません。

SQL Server 2005 では、ステートメントレベルの再コンパイルを実行できます。つまり、あるステートメントが原因で再コンパイルが実行された場合、そのステートメントのみが再コンパイルされ、バッチ全体は再コンパイルされません。この動作は SQL Server 2000 とは異なります。同じバッチ内に 1 つの CREATE TABLE ステートメントと 4 つの INSERT ステートメントを含む、次のような例について考えてみましょう。

CREATE TABLE dbo.t3(a int)
INSERT INTO dbo.t3 VALUES (1) 
INSERT INTO dbo.t3 VALUES (1,1) 
INSERT INTO dbo.t3 VALUES (3) 
GO

SELECT * FROM dbo.t3

まず、バッチがコンパイルされます。CREATE TABLE ステートメントはコンパイルされますが、dbo.t3 テーブルがまだ存在していないため、INSERT ステートメントはコンパイルされません。

次に、バッチの実行が開始されます。テーブルが作成されます。最初の INSERT がコンパイルされ、直ちに実行されます。この時点でテーブルに含まれる行は 1 つです。次に、2 番目の INSERT ステートメントがコンパイルされます。コンパイルが失敗し、バッチが終了します。SELECT ステートメントは 1 行を返します。

SQL Server 2000 では、バッチの実行が開始されて、テーブルが作成されます。3 つの INSERT ステートメントが 1 つずつコンパイルされますが、これらのステートメントは実行されません。2 番目の INSERT でコンパイル エラーが発生したため、バッチ全体が終了します。SELECT ステートメントは行を返しません。

バッチの使用に関するルール

バッチの使用には、次のルールが適用されます。

  • バッチでは CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER、および CREATE VIEW の各ステートメントを他のステートメントと組み合わせて使用することはできません。CREATE ステートメントはバッチの最初に記述する必要があります。そのバッチの CREATE 以降のステートメントはすべて、CREATE ステートメントの定義の一部として解釈されます。
  • テーブルを変更してから、同じバッチの中で新しい列を参照することはできません。
  • EXECUTE ステートメントがバッチ内の最初のステートメントである場合、EXECUTE キーワードは不要です。EXECUTE ステートメントがバッチ内の最初のステートメントではない場合、EXECUTE キーワードが必要です。
ms175502.note(ja-jp,SQL.90).gif重要 :
バッチ ファイルには資格情報をプレーン テキストで記述できます。資格情報は、バッチの実行中にユーザーの画面に表示することも可能です。

参照

概念

バッチ実行環境と MARS
バッチの指定
バッチの例

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2005 年 12 月 5 日

新しい内容 :
  • ステートメントレベルの再コンパイルに関する情報を追加しました。
  • セキュリティの記述を追加しました。