次の方法で共有


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

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric Warehouse Microsoft Fabric SQL Database

Transact-SQL ステートメントを実行する条件を設定します。 boolean_expressionTRUEと評価された場合、boolean_expressionに続く Transact-SQL ステートメント (sql_statement) が実行されます。 省略可能な ELSE キーワードは、 boolean_expressionFALSE または NULLに評価されたときに実行される代替 Transact-SQL ステートメントです。

Transact-SQL 構文表記規則

構文

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

引数

boolean_expression

TRUEまたはFALSEを返す式。 boolean_expressionSELECT ステートメントが含まれている場合は、SELECT ステートメントをかっこで囲む必要があります。

{ sql_statement | statement_block }

ステートメント ブロックで定義されている任意の有効な Transact-SQL ステートメントまたはステートメント グループ化。 ステートメント ブロック (バッチ) を定義するには、フロー制御言語キーワードの BEGINENDを使用します。 すべての Transact-SQL ステートメントは BEGIN...END ブロック内で有効ですが、特定の Transact-SQL ステートメントを同じバッチ (ステートメント ブロック) 内でグループ化しないでください。

戻り値の型

Boolean

この記事の Transact-SQL コード サンプルは AdventureWorks2022 または AdventureWorksDW2022 サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。

A. ブール式を使用する

次の例では、ブール式 (1 = 1) が true であるため、最初のステートメントが出力されます。

IF 1 = 1 PRINT 'Boolean expression is true.'
ELSE PRINT 'Boolean expression is false.';

次の例では、ブール式 (1 = 2) が false であるため、2 番目のステートメントが出力されます。

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

B. ブール式の一部としてクエリを使用する

次の例では、クエリをブール式の一部として実行します。 Product テーブルには、WHERE 句の条件を満たす 10 個の自転車があるため、最初の print ステートメントが実行されます。 > 5> 15に変更して、ステートメントの 2 番目の部分を実行する方法を確認できます。

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 変数を 550、および 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

例: Azure Synapse Analytics、Analytics Platform System (PDW)

E. クエリをブール式の一部として使用する

次の例では、IF...ELSEを使用して、AdventureWorksDW2012 データベースのDimProduct テーブル内の項目の重みに基づいて、ユーザーに表示する 2 つの応答のうちどれを決定します。

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