IF...ELSE (Transact-SQL)IF...ELSE (Transact-SQL)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data WarehouseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data Warehouse

Impone condiciones en la ejecución de una instrucción de Transact-SQLTransact-SQL.Imposes conditions on the execution of a Transact-SQLTransact-SQL statement. La instrucción Transact-SQLTransact-SQL que sigue a una palabra clave IF y a su condición se ejecuta si la condición se cumple: la expresión booleana devuelve TRUE.The Transact-SQLTransact-SQL statement that follows an IF keyword and its condition is executed if the condition is satisfied: the Boolean expression returns TRUE. La palabra clave opcional ELSE introduce otra instrucción Transact-SQLTransact-SQL que se ejecuta cuando la condición IF no se cumple: la expresión booleana devuelve FALSE.The optional ELSE keyword introduces another Transact-SQLTransact-SQL statement that is executed when the IF condition is not satisfied: the Boolean expression returns FALSE.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

IF Boolean_expression   
     { sql_statement | statement_block }   
[ ELSE   
     { sql_statement | statement_block } ]   

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentosArguments

Boolean_expressionBoolean_expression
Es una expresión que devuelve TRUE o FALSE.Is an expression that returns TRUE or FALSE. Si la expresión booleana contiene una instrucción SELECT, la instrucción SELECT debe ir entre paréntesis.If the Boolean expression contains a SELECT statement, the SELECT statement must be enclosed in parentheses.

{ sql_statement| statement_block }{ sql_statement| statement_block }
Se trata de cualquier instrucción o grupo de instrucciones Transact-SQLTransact-SQL definidas con un bloque de instrucciones.Is any Transact-SQLTransact-SQL statement or statement grouping as defined by using a statement block. A menos que se utilice un bloque de instrucciones, la condición IF o ELSE puede afectar al rendimiento de una sola instrucción Transact-SQLTransact-SQL.Unless a statement block is used, the IF or ELSE condition can affect the performance of only one Transact-SQLTransact-SQL statement.

Para definir un bloque de instrucciones, utilice las palabras clave de control de flujo BEGIN y END.To define a statement block, use the control-of-flow keywords BEGIN and END.

ObservacionesRemarks

Una construcción IF...ELSE puede utilizarse en lotes, en procedimientos almacenados y en consultas ad hoc.An IF...ELSE construct can be used in batches, in stored procedures, and in ad hoc queries. Cuando esta construcción se utiliza en un procedimiento almacenado, se suele utilizar para probar la existencia de algún parámetro.When this construct is used in a stored procedure, it is frequently used to test for the existence of some parameter.

Las pruebas IF pueden estar anidadas después de otra área IF o a continuación de un área ELSE.IF tests can be nested after another IF or following an ELSE. El límite del número de niveles anidados depende de la memoria disponible.The limit to the number of nested levels depends on available memory.

EjemploExample

IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')
       SELECT 'Weekend';
ELSE 
       SELECT 'Weekday';

Para más ejemplos, vea ELSE (IF...ELSE) (Transact-SQL).For more examples, see ELSE (IF...ELSE) (Transact-SQL).

Ejemplos: Azure Synapse AnalyticsAzure Synapse Analytics y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Almacenamiento de datos paralelosParallel Data Warehouse

En el ejemplo siguiente se usa IF...ELSE para determinar cuál de las dos respuestas se muestra al usuario, en función del peso de un elemento en la tabla DimProduct.The following example uses IF...ELSE to determine which of two responses to show the user, based on the weight of an item in the DimProduct table.

-- Uses AdventureWorksDW  

DECLARE @maxWeight FLOAT, @productKey INTEGER  
SET @maxWeight = 100.00  
SET @productKey = 424  
IF @maxWeight <= (SELECT Weight from DimProduct WHERE ProductKey = @productKey)   
    SELECT @productKey AS ProductKey, EnglishDescription, Weight, 'This product is too heavy to ship and is only available for pickup.' 
        AS ShippingStatus
    FROM DimProduct WHERE ProductKey = @productKey
ELSE  
    SELECT @productKey AS ProductKey, EnglishDescription, Weight, 'This product is available for shipping or pickup.' 
        AS ShippingStatus
    FROM DimProduct WHERE ProductKey = @productKey

Consulte tambiénSee Also

BEGIN...END (Transact-SQL) BEGIN...END (Transact-SQL)
END (BEGIN...END) (Transact-SQL) END (BEGIN...END) (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHILE (Transact-SQL) WHILE (Transact-SQL)
CASE (Transact-SQL) CASE (Transact-SQL)
Lenguaje de control de flujo (Transact-SQL) ELSE (IF...ELSE) (Transact-SQL)Control-of-Flow Language (Transact-SQL) ELSE (IF...ELSE) (Transact-SQL)