Sentencia BEGIN END en Transact SQL

El BEGIN END son estructuras de control de flujo para contener varias sentencias agrupadas en un bloque de código determinado. En definitiva, permiten ejecutar una serie de instrucciones en conjunto.

Los BEGIN END pueden anidarse en un bloque de código.


Es recomendable acostumbrarse al uso de BEGIN END, incluso en instrucciones únicas cuando trabajamos con estructuras de control de flujo.

La sintaxis es muy sencilla:

BEGIN
    [codigo]
END

Veamos un ejemplo sencillo con un fragmento de código que genera un bucle:

Ejemplo BEGIN…END

DECLARE @iter INT = 1;
WHILE @iter <= 10
BEGIN
    SELECT @iter as iter
    SET @iter = @iter + 1
END

La variable @iter ira incrementándose en uno por cada vuelta del bucle hasta que adquiera el valor @iter= 10, último valor válido en la expresión del bucle WHILE. Esto se traduce en que el resultado de ejecución pintara por pantalla diez veces la variable @iter empezando por el valor inicial de 1 y terminando por el valor de 10.

Para entender mejor cómo funciona la agrupación de código, instamos a probar el mismo código anterior eliminando las estructuras de control de flujo BEGIN END.

DECLARE @iter INT = 1;
WHILE @iter <= 10
    SELECT @iter as iter
    SET @iter = @iter + 1

Veremos que al no agruparse las sentencias, nuestro código queda atrapado en un bucle infinito mostrando como resultado de ejecución 1 de manera constante en cada vuelta.

A continuación, veremos un ejemplo de BEGIN END anidados, modificando el código anterior:

DECLARE @iter INT = 1;
WHILE @iter <= 10
BEGIN
    SELECT @iter as iter
    IF @iter = 3
        BEGIN
            SELECT ('INFO REGISTRATION:') AS INFO;
            SELECT nombre,
                   apellidos,
                   producto,
                   precio
            FROM Clientes
            INNER JOIN Pedidos
            ON Clientes.idClientes = Pedidos.idClientes
            WHERE Clientes.idClientes = @iter
        END
    SET @iter = @iter + 1
END

La ejecución irá pintando el valor de la variable @iter de 1 a 10 como en el caso anterior, pero cuando adquiera el valor de 3, el código entrara por el IF ejecutando las instrucciones de la agrupación del nuevo bloque BEGIN END, el cual mostrará un mensaje de información y devolverá el valor de los campos: nombre, apellidos, producto y precio de las tablas Clientes y Pedidos para el idPedidos = 3.