適用于: SQL Server Azure SQL資料庫 Azure SQL 受控執行個體Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 倉儲 中的 SQL 端點

在 Transact-SQL 陳述式的執行上強加條件。 如果 Boolean_expression 評估為 TRUE,就會執行 Boolean_expression 後面的 Transact-SQL 陳述式 ( sql_statement )。 選擇性的 ELSE 關鍵字是在 Boolean_expression 評估為 FALSE 或 NULL 時,所執行的替代 Transact-SQL 陳述式。

Transact-SQL 語法慣例

Syntax

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。 雖然 BEGIN...END 區塊中所有的 Transact-SQL 陳述式都是有效的,但某些 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 AdventureWorks2022;  
(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 AdventureWorks2022;  
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)