BEGIN...END (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

Transact-SQL ステートメントのグループを実行できるように、一連の Transact-SQL ステートメントを囲みます。 BEGIN と END はフロー制御言語のキーワードです。

Transact-SQL 構文表記規則

構文

BEGIN  
    { sql_statement | statement_block }   
END  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

{ sql_statement | statement_block }
有効な 1 つの Transact-SQL ステートメント、またはステートメント ブロックで定義したステートメントのグループを指定します。

注釈

BEGIN...END ブロックは入れ子にできます。

Transact-SQL ステートメントはすべて BEGIN...END ブロック内で有効ですが、特定の Transact-SQL ステートメントについては、同じバッチまたはステートメント ブロック内でまとめてグループ化してはいけません。

次の例では、BEGINEND を使用して、まとめて実行する一連の Transact-SQL ステートメントを定義します。 BEGIN...END ブロックが指定されていない場合、両方の ROLLBACK TRANSACTION ステートメントが実行され、両方の PRINT メッセージが返されます。

USE AdventureWorks2022;
GO  
BEGIN TRANSACTION
GO  
IF @@TRANCOUNT = 0  
BEGIN  
    SELECT FirstName, MiddleName   
    FROM Person.Person WHERE LastName = 'Adams';
    ROLLBACK TRANSACTION;
    PRINT N'Rolling back the transaction two times would cause an error.';
END;
ROLLBACK TRANSACTION;
PRINT N'Rolled back the transaction.';
GO  
/*  
Rolled back the transaction.  
*/  

例: Azure Synapse Analytics、Analytics Platform System (PDW)

次の例では、BEGINEND を使用して、まとめて実行する一連の SQL ステートメントを定義します。 BEGIN...END ブロックが含まれていない場合、次の例は連続するループになります。

-- Uses AdventureWorks  

DECLARE @Iteration Integer = 0;
WHILE @Iteration <10  
BEGIN  
    SELECT FirstName, MiddleName   
    FROM dbo.DimCustomer WHERE LastName = 'Adams';
    SET @Iteration += 1  ;
END;

関連項目

ALTER TRIGGER (Transact-SQL)
フロー制御言語 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
END (BEGIN...END) (Transact-SQL)