ELSE (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 语句的执行条件。 如果boolean_expression的计算结果为 TRUE,则执行boolean_expression后面的 Transact-SQL 语句(sql_statement)。 可选ELSE关键字是boolean_expression计算结果FALSENULL执行的备用 Transact-SQL 语句。

Transact-SQL 语法约定

语法

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

参数

boolean_expression

返回 TRUEFALSE. 如果boolean_expression包含语句SELECT,则必须SELECT将语句括在括号中。

{ sql_statement | statement_block }

使用语句块定义的任何有效的 Transact-SQL 语句或语句分组。 若要定义语句块(批处理),请使用流控制语言关键字 BEGINEND。 尽管所有 Transact-SQL 语句在块中 BEGIN...END 都有效,但某些 Transact-SQL 语句不应在同一批(语句块)内组合在一起。

返回类型

布尔值

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

A. 使用布尔表达式

下面的示例具有一个布尔表达式(1 = 1),该表达式为 true,因此,输出第一个语句。

IF 1 = 1 PRINT 'Boolean expression is true.'
ELSE PRINT 'Boolean expression is false.';

下面的示例具有一个布尔表达式(),该表达式为1 = 2 false,因此输出第二个语句。

IF 1 = 2 PRINT 'Boolean expression is true.'
ELSE PRINT 'Boolean expression is false.';
GO

B. 使用查询作为布尔表达式的一部分

下面的示例执行属于布尔表达式一部分的查询。 由于表中有 10 辆符合子句中WHERE条件的自行车Product,因此执行第一个 print 语句。 可以更改为 > 5 > 15,查看语句的第二部分的执行方式。

USE AdventureWorks2022;
GO

IF (SELECT COUNT(*)
    FROM Production.Product
    WHERE Name LIKE 'Touring-3000%'
) > 5
    PRINT 'There are more than 5 Touring-3000 bicycles.'
ELSE
    PRINT 'There are 5 or less Touring-3000 bicycles.';
GO

°C 使用语句块

下面的示例执行属于布尔表达式一部分的查询,然后再根据布尔表达式的结果执行稍有不同的语句块。 每个语句块以 BEGIN 开头,并以 END 结束。

USE AdventureWorks2022;
GO

DECLARE @AvgWeight DECIMAL(8, 2),
    @BikeCount INT

IF (
    SELECT COUNT(*)
    FROM Production.Product
    WHERE Name LIKE 'Touring-3000%'
) > 5
BEGIN
    SET @BikeCount = (
            SELECT COUNT(*)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );
    SET @AvgWeight = (
            SELECT AVG(Weight)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );

    PRINT 'There are ' + CAST(@BikeCount AS VARCHAR(3)) + ' Touring-3000 bikes.'
    PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.';
END
ELSE
BEGIN
    SET @AvgWeight = (
            SELECT AVG(Weight)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );

    PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.';
END;
GO

D. 使用嵌套 IF...ELSE 语句

以下示例演示如何将语句嵌套在另一个 IF...ELSE 语句中。 将 @Number 变量设置为 550500测试每个语句。

DECLARE @Number INT;
SET @Number = 50;

IF @Number > 100
    PRINT 'The number is large.';
ELSE
BEGIN
    IF @Number < 10
        PRINT 'The number is small.';
    ELSE
        PRINT 'The number is medium.';
END;
GO

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

E. 将查询用作布尔表达式的一部分

以下示例用于IF...ELSE根据数据库中表中AdventureWorksDW2012DimProduct的权重确定显示用户的两个响应中的哪一个。

DECLARE @maxWeight FLOAT, @productKey INT;

SET @maxWeight = 100.00;
SET @productKey = 424;

IF @maxWeight <= (
    SELECT [Weight]
    FROM DimProduct
    WHERE ProductKey = @productKey;
)
BEGIN
    SELECT @productKey,
        EnglishDescription,
        [Weight],
        'This product is too heavy to ship and is only available for pickup.'
    FROM DimProduct
    WHERE ProductKey = @productKey;
END
ELSE
BEGIN
    SELECT @productKey,
        EnglishDescription,
        [Weight],
        'This product is available for shipping or pickup.'
    FROM DimProduct
    WHERE ProductKey = @productKey;
END