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

Область применения:yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр SQL Azure yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Задает условия выполнения для инструкции Transact-SQL. Инструкция Transact-SQL (sql_statement), следующая за выражением Boolean_expression, выполняется, если выражение Boolean_expression имеет значение TRUE. Необязательное ключевое слово ELSE позволяет указать альтернативную инструкцию Transact-SQL, выполняемую в случае, если значение выражения Boolean_expression равно FALSE или NULL.

Topic link iconСинтаксические обозначения в Transact-SQL

Синтаксис

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

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

Boolean_expression
Выражение, возвращающее значение TRUE или FALSE. Если логическое выражение Boolean_expression содержит инструкцию SELECT, инструкция SELECT должна быть заключена в скобки.

{ sql_statement | statement_block }
Это любая допустимая инструкция или группа инструкций Transact-SQL, которые определены в блоке инструкций. Чтобы определить блок инструкций (пакет), используются ключевые слова BEGIN и END языка управления выполнением. Хотя в пределах блока BEGIN...END допускаются любые инструкции Transact-SQL, некоторые инструкции Transact-SQL не следует группировать в пределах одного пакета (блока операторов).

Типы результата

Boolean

Примеры

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  

Б. Использование запроса как части логического выражения

В следующем примере выполняется запрос как часть логического выражения. В таблице Product имеются данные о 10 велосипедах, которые соответствуют предложению WHERE, поэтому выполняется первый оператор вывода. Измените > 5 на > 15, чтобы посмотреть, как может быть выполнена вторая часть инструкции.

USE AdventureWorks2012;  
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  

В. Использование блока инструкций

В следующем примере запрос выполняется как часть логического выражения, а затем выполняются немного отличающиеся блоки инструкций, основанные на результате логического выражения. Каждый блок инструкций начинается с BEGIN и завершается END.

USE AdventureWorks2012;  
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  

Г. Использованием вложенных инструкций 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  

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

Д. Использование запроса как части логического выражения

В следующем примере используется IF...ELSE для определения того, какой из двух ответов показать пользователю, на основе веса элемента в таблице DimProduct.

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