Uso de bloques IF y WHILE para controlar el flujo del programa

Completados

Todos los lenguajes de programación incluyen elementos que le ayudan a determinar el flujo del programa o el orden en que se ejecutan las instrucciones. Aunque no tan destacado como lenguajes como C#, T-SQL proporciona un conjunto de palabras clave de control de flujo que puede usar para realizar pruebas lógicas y crear bucles que contengan las instrucciones de manipulación de datos de T-SQL. En esta lección, aprenderá a usar las palabras clave y WHILE T-SQLIF.

Descripción del control T-SQL del lenguaje de flujo

SQL Server proporciona elementos del lenguaje que controlan el flujo de ejecución del programa dentro de lotes de T-SQL, procedimientos almacenados y funciones definidas por el usuario con múltiples sentencias. Estos elementos de control de flujo significan que puede determinar mediante programación si se deben ejecutar instrucciones y determinar mediante programación el orden de esas instrucciones que se deben ejecutar.

Estos elementos incluyen, pero no se limitan a:

  • IF...ELSE, que ejecuta código basado en una expresión booleana.
  • WHILE, que crea un bucle que se ejecuta proporcionando una condición es true.
  • BEGIN...END, que define una serie de instrucciones T-SQL que se deben ejecutar juntas.
  • Otras palabras clave, por ejemplo, BREAK, , CONTINUEWAITFOR y RETURN, que se usan para admitir operaciones de control de flujo de T-SQL.

Este es un ejemplo de la IF instrucción :

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

Uso de lógica condicional en los programas mediante IF...ELSE

La IFestructura ...ELSE se usa en T-SQL para ejecutar condicionalmente un bloque de código basado en un predicado. La IF instrucción determina si se ejecuta o no la siguiente instrucción o bloque (si BEGINse usa ...END ). Si el predicado se evalúa como TRUE, se ejecuta el código del bloque. Cuando el predicado se evalúa como FALSE o UNKNOWN, el bloque no se ejecuta, a menos que se use la palabra clave opcional ELSE para identificar otro bloque de código.

En la siguiente IF instrucción, se pregunta a la base de datos si el OBJECT_ID IS NULLy, si es así, devuelve la PRINT instrucción . En este ejemplo, el objeto es NOT NULL y, por tanto, FALSE, lo que significa que el BEGIN/END código no se ejecutará. La PRINT instrucción solo se ejecutará si el objeto no existe en la base de datos.

USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END;

Debido a las limitaciones del código anterior con solo una IF instrucción , esto puede resultar confuso. IF La combinación y ELSE proporciona más flexibilidad con la lógica en el código y puede usar varias ELSE instrucciones. Con el uso de , tiene otra opción de ELSEejecución cuando el IF predicado se evalúa como FALSE o UNKNOWN, como en el ejemplo siguiente:

IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
    PRINT 'The specified object does not exist';
END
ELSE
BEGIN
    PRINT 'The specified object exists';
END;

Dentro de las operaciones de manipulación de datos, el uso IF de con la palabra clave EXISTS puede ser una herramienta útil para comprobaciones de existencia eficaces, como en el ejemplo siguiente:

IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
    PRINT 'Employee has associated orders';
END;

Descripción del bucle mediante instrucciones WHILE

La WHILE instrucción se usa para ejecutar código en un bucle basado en un predicado. Al igual que la IF instrucción , la WHILE instrucción determina si se ejecuta la siguiente instrucción o bloque (si BEGINse usa ...END ). El bucle continúa ejecutándose siempre que la condición se evalúe como TRUE. Normalmente, el bucle se controla con una variable probada por el predicado y manipulada en el cuerpo del propio bucle.

En el ejemplo siguiente se usa la @empid variable del predicado y se cambia su valor en el BEGIN...END bloque . SELECT se usa aquí (en lugar de SET) para mostrar la lectura de un valor de columna de un resultado de consulta en una variable:

DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
   BEGIN
	SELECT @lname = lastname FROM HR.Employees
		WHERE empid = @empid;
	PRINT @lname;
	SET @empid += 1;
   END;

Para obtener opciones adicionales dentro de un WHILE bucle, puede usar las CONTINUE palabras clave y BREAK para controlar el flujo.