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

在 Transact-SQL 陳述式的執行上強加條件。如果 Boolean_expression 得出 TRUE,便會執行在 Boolean_expression 之後的 Transact-SQL 陳述式 (sql_statement)。選擇性的 ELSE 關鍵字是 Boolean_expression 得出 FALSE 或 NULL 時,所執行的替代 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。雖然 BEGIN...END 區塊中所有的 Transact-SQL 陳述式都是有效的,但某些 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 AdventureWorks
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 AdventureWorks
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 變數設定為 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