Share via


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制御言語キーワード (keyword)です。

Transact-SQL 構文表記規則

構文

BEGIN
    { sql_statement | statement_block }
END

Note

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

引数

{ sql_statement | statement_block}

ステートメント ブロックを使用して定義された、有効な 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

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

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

-- Uses AdventureWorksDW

DECLARE @Iteration INT = 0;

WHILE @Iteration < 10
BEGIN
    SELECT FirstName,
        MiddleName
    FROM dbo.DimCustomer
    WHERE LastName = 'Adams';

    SET @Iteration += 1;
END;