相关文章推荐
面冷心慈的红酒  ·  ios ...·  2 月前    · 
豪情万千的茶叶  ·  Bpmn.js ...·  1 年前    · 

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

指定 Transact-SQL 语句的执行条件。 如果 Boolean_expression 的计算结果为 TRUE,则执行跟随在 Boolean_expressionis 后的 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 } ]   

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

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

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

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.' ;  

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

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

USE AdventureWorks2012;  
(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.' ;  

C. 使用语句块

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

USE AdventureWorks2012;  
DECLARE @AvgWeight DECIMAL(8,2), @BikeCount INT  
(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)) + '.';  
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 ;  

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

下面的示例演示如何将 IF …ELSE 语句可相互嵌套。 将 @Number 变量设置为 550500 以测试每个语句。

DECLARE @Number INT;  
SET @Number = 50;  
IF @Number > 100  
   PRINT 'The number is large.';  
   BEGIN  
      IF @Number < 10  
      PRINT 'The number is small.';  
      PRINT 'The number is medium.';  
   END ;  

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

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

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

-- Uses AdventureWorks  
DECLARE @maxWeight FLOAT, @productKey INTEGER  
SET @maxWeight = 100.00  
SET @productKey = 424  
IF @maxWeight <= (SELECT Weight FROM DimProduct WHERE ProductKey=@productKey)   
    (SELECT @productKey, EnglishDescription, Weight, 'This product is too heavy to ship and is only available for pickup.' FROM DimProduct WHERE ProductKey=@productKey)  
    (SELECT @productKey, EnglishDescription, Weight, 'This product is available for shipping or pickup.' FROM DimProduct WHERE ProductKey=@productKey)  

ALTER TRIGGER (Transact-SQL)
控制流语言 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
IF...ELSE (Transact-SQL)