IF...ELSE (Transact-SQL)

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

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

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

boolean_expression

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

{ sql_statement | statement_block }

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

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

注解

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

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

示例

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

有关更多示例,请参阅 EL标准版 (IF...EL标准版)

示例: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;