В этом руководстве вы изучите оператор SQL Server IF…ELSE для управления ходом выполнения программы.
Оператор IF…ELSE — это оператор управления потоком, который позволяет выполнить или пропустить блок операторов на основе указанного условия.
Заявление ЕСЛИ
Ниже показан синтаксис оператора IF:
IF boolean_expression BEGIN { statement_block } END
В этом синтаксисе, если Boolean_expression оценивается как TRUE, то выполняется statement_block в блоке BEGIN…END. В противном случае statement_block пропускается, и управление программой передается оператору после ключевого слова END.
Обратите внимание: если логическое выражение содержит оператор SELECT, необходимо заключить оператор SELECT в скобки.
В следующем примере сначала извлекается сумма продаж из таблицы sales.order_items в образце базы данных, а затем выводится сообщение, если сумма продаж превышает 1 миллион.
BEGIN DECLARE @sales INT; SELECT @sales = SUM(list_price * quantity) FROM sales.order_items i INNER JOIN sales.orders o ON o.order_id = i.order_id WHERE YEAR(order_date) = 2018; SELECT @sales; IF @sales > 1000000 BEGIN PRINT 'Great! The sales amount in 2018 is greater than 1,000,000'; END END
Вывод блока кода:
Great! The sales amount in 2018 is greater than 1,000,000
Обратите внимание, что для просмотра приведенного выше выходного сообщения вам необходимо нажать на вкладку «Сообщения»:
Оператор IF ELSE
Если условие в предложении IF оценивается как ЛОЖЬ и вы хотите выполнить другой блок операторов, вы можете использовать предложение ELSE.
Ниже проиллюстрирован оператор IF ELSE:
IF Boolean_expression BEGIN -- Statement block executes when the Boolean expression is TRUE END ELSE BEGIN -- Statement block executes when the Boolean expression is FALSE END
Каждое выражение IF имеет условие. Если условие оценивается как TRUE, то выполняется блок операторов в предложении IF. Если условие равно FALSE, то выполняется блок кода в предложении ELSE.
Смотрите следующий пример:
BEGIN DECLARE @sales INT; SELECT @sales = SUM(list_price * quantity) FROM sales.order_items i INNER JOIN sales.orders o ON o.order_id = i.order_id WHERE YEAR(order_date) = 2017; SELECT @sales; IF @sales > 10000000 BEGIN PRINT 'Great! The sales amount in 2018 is greater than 10,000,000'; END ELSE BEGIN PRINT 'Sales amount in 2017 did not reach 10,000,000'; END END
В этом примере:
Во-первых, следующий оператор устанавливает общий объем продаж за 2017 год в переменную @sales:
SELECT @sales = SUM(list_price * quantity) FROM sales.order_items i INNER JOIN sales.orders o ON o.order_id = i.order_id WHERE YEAR(order_date) = 2017;
Во-вторых, этот оператор возвращает продажи в выходной файл:
SELECT @sales;
Наконец, предложение IF проверяет, превышает ли сумма продаж в 2017 году 10 миллионов. Поскольку сумма продаж меньше этого значения, выполняется блок операторов в предложении ELSE.
IF @sales > 10000000 BEGIN PRINT 'Great! The sales amount in 2018 is greater than 10,000,000'; END ELSE BEGIN PRINT 'Sales amount in 2017 did not reach 10,000,000'; END
Ниже показан результат:
Sales amount did not reach 10,000,000
Вложенные IF…ELSE
SQL Server позволяет вкладывать оператор IF…ELSE внутрь другого оператора IF…ELSE, см. следующий пример:
BEGIN DECLARE @x INT = 10, @y INT = 20; IF(@x > 0) BEGIN IF(@x 0 and x 0 and x >= y'; END END
В этом примере:
Сначала объявим две переменные @x и @y и зададим им значения 10 и 20 соответственно:
DECLARE @x INT = 10, @y INT = 20;
Во-вторых, выходной оператор IF проверяет, больше ли @x нуля. Поскольку @x установлено в 10, условие(@x > 10) истинно. Следовательно, выполняется вложенный оператор IF.
Наконец, вложенный оператор IF проверяет, меньше ли @x, чем @y( @x < @y). Поскольку @y установлено равным 20, условие(@x 0 and x < y'; в ветви IF.
Вот что получилось:
x > 0 and x < y
Хорошей практикой является не вкладывать оператор IF в другой оператор, поскольку это затрудняет чтение и поддержку кода.
В этом руководстве вы узнали, как использовать оператор SQL Server IF…ELSE для управления потоком выполнения кода.