Share via


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

Transact-SQL ステートメントを実行する条件を設定します。Boolean_expression の後の Transact-SQL ステートメント (sql_statement) は、Boolean_expression が TRUE と評価される場合に実行されます。オプションの 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 }
    有効な 1 つの 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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 ステートメントの中に別の 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