バッチの例

ここでは、Microsoft SQL Server Management Studio コード エディタと sqlcmd ユーティリティで GO コマンドを使用してバッチ境界を定義するスクリプトの例を示します。

この例では、ビューを作成します。CREATE VIEW ステートメントを使用したバッチ内では他のステートメントを使用できないため、CREATE VIEW ステートメントとその前後の USE ステートメントおよび SELECT ステートメントを分離するために、GO コマンドが必要です。

USE AdventureWorks;
GO 
CREATE VIEW dbo.vProduct
AS
SELECT ProductNumber, Name
FROM Production.Product;
GO 
SELECT * 
FROM dbo.vProduct;
GO 

次の例では、複数のバッチを 1 つのトランザクションに結合します。BEGIN TRANSACTION ステートメントと COMMIT ステートメントによってトランザクションの境界が区切られます。BEGIN TRANSACTION、USE、CREATE TABLE、SELECT、COMMIT の各ステートメントはいずれも、それぞれ別個のステートメント バッチ内にあります。INSERT ステートメントはすべて同じバッチ内にあります。

BEGIN TRANSACTION
GO
USE AdventureWorks;
GO
CREATE TABLE dbo.mycompanies
(
 id_num int IDENTITY(100, 5),
 company_name nvarchar(100)
)
GO
INSERT mycompanies (company_name)
   VALUES (N'A Bike Store');
INSERT mycompanies (company_name)
   VALUES (N'Progressive Sports');
INSERT mycompanies (company_name)
   VALUES (N'Modular Cycle Systems');
INSERT mycompanies (company_name)
   VALUES (N'Advanced Bike Components');
INSERT mycompanies (company_name)
   VALUES (N'Metropolitan Sports Supply');
INSERT mycompanies (company_name)
   VALUES (N'Aerobic Exercise Company');
INSERT mycompanies (company_name)
   VALUES (N'Associated Bikes');
INSERT mycompanies (company_name)
   VALUES (N'Exemplary Cycles');
GO

SELECT id_num, company_name
FROM dbo.mycompanies
ORDER BY company_name ASC;
GO
COMMIT;
GO

次のスクリプトには問題点が 2 つあります。1 つは、変数 @MyVar が 2 番目のバッチで宣言され、3 番目のバッチで参照されている点です。もう 1 つは、2 番目のバッチで開始しているコメントが同じバッチ内で終了せず、3 番目のバッチ内で終了している点です。sqlcmd が GO コマンドを読み取り、Microsoft SQL Server 2005 に最初のバッチを送信すると、/* と */ が同じバッチ内にないために構文エラーが発生します。

USE AdventureWorks;
GO
DECLARE @MyVar INT
/* Start of the split comment.
GO
End of the split comment. */
SELECT @MyVar = 29;
GO