Использование блоков IF и WHILE для управления ходом выполнения программы
Все языки программирования включают элементы, которые помогают определить поток программы или порядок выполнения инструкций. В то время как не столь же полнофункциональный язык, как C#, T-SQL предоставляет набор ключевых слов управления потоком, которые можно использовать для выполнения логических тестов и создания циклов, содержащих инструкции обработки данных T-SQL. На этом занятии вы узнаете, как использовать ключевые слова T-SQL и WHILE T-SQLIF.
Понимание управляющих конструкций T-SQL
SQL Server предоставляет языковые элементы, которые управляют потоком выполнения программы в пакетах T-SQL, хранимых процедурах и многостатных пользовательских функциях. Эти элементы управления потока означают, что можно программно определить, следует ли выполнять инструкции и программно определять порядок этих инструкций, которые должны выполняться.
Эти элементы включают в себя, но не ограничиваются следующими элементами:
-
IF...ELSE, который выполняет код на основе логического выражения. -
WHILE, который создает цикл, выполняющий условие, имеет значение true. -
BEGIN...END, который определяет ряд инструкций T-SQL, которые должны выполняться вместе. - Другие ключевые слова, например,
BREAKCONTINUEWAITFOR иRETURN, которые используются для поддержки операций управления потоками T-SQL.
Ниже приведен пример инструкции IF :
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Используйте условную логику в программах с помощью IF... ИНАЧЕ
IFСтруктура ...ELSE используется в T-SQL для условного выполнения блока кода на основе предиката. Оператор IF определяет, выполняется ли следующая инструкция или блок (если BEGINиспользуется ...END ). Если предикат оценивается как TRUE, выполняется код в блоке. Если предикат оценивается как FALSE или UNKNOWN, блок не выполняется, если не используется необязательное ELSE ключевое слово для идентификации другого блока кода.
В следующей IF инструкции мы запрашиваем базу данных, если OBJECT_ID IS NULL, и если да, верните инструкцию PRINT . В этом примере объект не имеет значения NULL и, следовательно, FALSE, что означает, что BEGIN/END код не будет выполнен. Оператор PRINT будет выполняться только в том случае, если объект не существует в базе данных.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Из-за ограничений в приведенном выше коде только с оператором IF это может быть запутано.
IF Объединение и ELSE увеличение гибкости логики в коде и использование нескольких ELSE инструкций. При использовании другого ELSEварианта IF выполнения при вычислении предиката значение FALSE или UNKNOWN, как показано в следующем примере:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
В операциях обработки данных с IF ключевым словом EXISTS может быть полезным инструментом для эффективной проверки существования, как показано в следующем примере:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Понимание циклов с использованием инструкций WHILE
Инструкция WHILE используется для выполнения кода в цикле на основе предиката.
IF Как и в инструкции, оператор определяет, WHILE выполняется ли следующая инструкция или блок (если BEGINиспользуется ...END ). Цикл продолжает выполняться до тех пор, пока условие оценивается как TRUE. Как правило, вы управляете циклом с помощью переменной, проверенной предикатом и управляемой в теле самого цикла.
В следующем примере переменная используется @empid в предикате и изменяет его значение в блоке BEGIN...END .
SELECT используется здесь (а не SET) для демонстрации значения столбца из результата запроса в переменную:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Для дополнительных параметров в WHILE цикле можно использовать CONTINUE ключевые слова и BREAK ключевые слова для управления потоком.