IF...ELSE (Transact-SQL)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 中的 SQL 终结点 Microsoft Fabric 中的仓库 Microsoft Fabric SQL 数据库

指定 Transact-SQL 语句的执行条件。 如果满足条件,则执行后跟 IF 关键字及其条件的 Transact-SQL 语句:布尔表达式返回 TRUE。 可选 ELSE 关键字引入了另一个 Transact-SQL 语句,该 IF 语句在条件不满足时执行:布尔表达式返回 FALSE

Transact-SQL 语法约定

语法

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

参数

boolean_expression

返回 TRUEFALSE. 如果布尔表达式包含语句 SELECT ,则必须将 SELECT 语句括在括号中。

{ sql_statement | statement_block }

使用语句块定义的任何 Transact-SQL 语句或语句分组。 除非使用了语句块, IF 否则或 ELSE 条件只能影响一个 Transact-SQL 语句的性能。

若要定义语句块,请使用流控制关键字 BEGINEND

注解

IF...ELSE可以在批处理、存储过程和即席查询中使用构造。 在存储过程中使用此构造时,通常会测试是否存在某些参数。

IF 测试可以嵌套在另一个 IF 或之后 ELSE。 嵌套级数的限制取决于可用内存。

示例

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

有关更多示例,请参阅 ELSE (IF...ELSE)

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

下面的示例使用 IF...ELSE,根据 DimProduct 表中各项的权重来决定向用户显示两个响应中的哪一个响应。

-- Uses AdventureWorksDW

DECLARE @maxWeight FLOAT, @productKey INT;

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;