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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

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 } ]   

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

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

{ sql_statement | statement_block }
ステートメント ブロックを使用して定義された有効な Transact-SQL ステートメントまたはグループ化ステートメントです。 ステートメント ブロック (バッチ) を定義するには、フロー制御言語キーワードの BEGIN と END を使用します。 Transact-SQL ステートメントはすべて BEGIN...END ブロック内で有効ですが、特定の Transact-SQL ステートメントについては、同じバッチ (ステートメント ブロック) 内でまとめてグループ化してはいけません。

戻り値の型

Boolean

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 ステートメントが実行されます。 どのような場合に 2 番目のステートメントが実行されるかを確認するには、> 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 変数を 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 を使用し、DimProduct テーブルの項目の重み付けを基にして、2 つの応答のどちらをユーザーに表示するかを決定します。

-- 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)  
ELSE  
    (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)