IF...ELSE (Transact-SQL)

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

指定 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 } ]   

注意

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

参数

Boolean_expression
返回 TRUE 或 FALSE 的表达式 。 如果布尔表达式中含有 SELECT 语句,则必须用括号将 SELECT 语句括起来。

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

若要定义语句块,请使用控制流关键字 BEGIN 和 END。

备注

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

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

示例

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

有关详细信息,请参阅 ELSE (IF...ELSE) (Transact-SQL)

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

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

-- 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

另请参阅

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