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が評価された場合、boolean_expressionに続く Transact-SQL ステートメント (sql_statement) が実行TRUE
されます。 省略可能なELSE
キーワード (keyword)は、boolean_expressionが評価FALSE
されたときに実行される代替 Transact-SQL ステートメントですNULL
。
構文
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 ステートメントまたはステートメント グループ化。 ステートメント ブロック (バッチ) を定義するには、フロー制御言語キーワード (keyword)をBEGIN
使用しますEND
。 すべての Transact-SQL ステートメントはブロック内で BEGIN...END
有効ですが、特定の Transact-SQL ステートメントを同じバッチ (ステートメント ブロック) 内でグループ化することはできません。
戻り値の型
Boolean
例
この記事の Transact-SQL コード サンプルは AdventureWorks2022
サンプル データベースを使用します。このサンプル データベースは、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. ブール式の一部としてクエリを使用する
次の例では、クエリをブール式の一部として実行します。 この句の条件WHERE
をProduct
満たす自転車がテーブルに 10 個存在するため、最初の print ステートメントが実行されます。 に> 15
変更> 5
して、ステートメントの 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 を使用します...EL Standard Edition ステートメント
次の例は、ステートメントを別の IF...ELSE
ステートメント内に入れ子にする方法を示しています。 変数を @Number
、、50
および 500
、 に5
設定して、各ステートメントをテストします。
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
内の項目の重みに基づいて、ユーザーに表示する 2 つの応答のうちどれを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
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示