SQL-сервер ЕСЛИ ИНАЧЕ

В этом руководстве вы изучите оператор 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 для управления потоком выполнения кода.

Мирослав С.

Автор статей, ИБ-специалист