共用方式為


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

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲

在 Transact-SQL 陳述式的執行上強制加上條件。 如果boolean_expression評估為 TRUE,則會執行boolean_expression之後的 Transact-SQL 語句 (sql_statement)。 選擇性ELSE關鍵詞是替代的 Transact-SQL 語句,會在boolean_expression評估為 FALSENULL執行。

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

boolean_expression

傳回 或FALSETRUE表達式。 如果boolean_expression包含 SELECT 語句,SELECT語句必須以括弧括住。

{ sql_statement | statement_block }

使用語句區塊所定義的任何有效 Transact-SQL 語句或語句群組。 若要定義語句區塊 (batch),請使用流程控制語言關鍵字 BEGINEND。 雖然所有 Transact-SQL 語句在區塊內都是有效的,但某些 Transact-SQL 語句不應該在同一 BEGIN...END 批 (語句區塊) 內群組在一起。

傳回類型

布林值

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (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. 使用查詢作為布爾表達式的一部分

以下範例會在布林運算式中執行查詢。 因為數據表中有 Product 10 輛自行車符合 子句中的 WHERE 條件,因此第一個 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 來判斷兩個回應中的哪一個,根據資料庫中數據表AdventureWorksDW2012中的DimProduct項目權數來向用戶顯示。

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