BEGIN...END (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure 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

注意

若要查看 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;