次の方法で共有


BEGIN...END (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス

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

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;