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

指定 Transact-SQL 语句的执行条件。如果 Boolean_expression 取值为 TRUE,则执行 Boolean_expression 后的 Transact-SQL 语句 (sql_statement)。当 Boolean_expression 取值为 FALSE 或 NULL 时,可选 ELSE 关键字为要执行的 Transact-SQL 语句。

主题链接图标Transact-SQL 语法约定

语法

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

参数

  • Boolean_expression
    返回 TRUE 或 FALSE 的表达式。如果 Boolean_expression 包含 SELECT 语句,则必须将 SELECT 语句括在括号中。

  • { sql_statement | statement_block }
    任何有效的 Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块(批处理),请使用控制流语言关键字 BEGIN 和 END。虽然所有 Transact-SQL 语句在 BEGIN...END 块内都有效,但有些 Transact-SQL 语句不能组合到同一个批(语句块)中。

结果类型

Boolean

示例

A. 使用简单的布尔表达式

下面的示例具有一个为 True 的简单布尔表达式 (1=1),因此打印第一条语句。

IF 1 = 1 PRINT 'Boolean_expression is true.'
ELSE PRINT 'Boolean_expression is false.' ;

下面的示例具有为 False 的简单布尔表达式 (1=2),因此打印第二条语句。

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

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

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

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 语句中嵌套另一个 IF ELSE 语句。将 @Number 变量设置为 5、50 和 500 以测试每个语句。

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