Використання блоків IF і WHILE для керування потоком програм
Усі мови програмування містять елементи, які допомагають визначити потік програми або порядок виконання інструкцій. Хоча це не так повно, як такі мови, як C#, T-SQL надає набір ключових слів керування потоком, які можна використовувати для виконання логічних тестів і створення циклів, що містять інструкції з обробки даних T-SQL. У цьому уроці ви дізнаєтеся, як використовувати ключові слова T-SQL IF і WHILE.
Загальні відомості про керування T-SQL мовою потоку
SQL Server надає мовні елементи, які керують потоком виконання програм у пакетах T-SQL, збережених процедур і багатодержавних користувацьких функцій. Ці елементи керування потоком означають, що ви можете програмно визначити, чи слід виконувати інструкції та програмно визначати порядок цих інструкцій, які потрібно виконати.
Ці елементи включають, але не обмежуються:
- ЯКЩО... ELSE, який виконує код на основі логічного виразу.
- У той час, як створюється цикл, який виконує надання умови має значення true.
- ПОЧИНАТИСЯ... End, яка визначає серію операторів T-SQL, які мають виконуватися разом.
- Інші ключові слова, наприклад BREAK, CONTINUE, WAITFOR і 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 is used) executes. Якщо предикат має значення TRUE, виконується код у блоці. Коли предикат повертає значення FALSE або UNKNOWN, блок не виконується, якщо необов'язкове ключове слово ELSE не використовується для визначення іншого блоку коду.
У наведеній нижче інструкції IF ми запитуємо базу даних, чи OBJECT_ID IS NULL, і якщо так, повертається інструкція PRINT. У цьому прикладі об'єкт має значення NOT 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 is used) executes. Цикл продовжує виконуватися до тих пір, поки умова повертає значення TRUE. Зазвичай ви керуєте циклом за допомогою змінної, перевіреної предикатом, і маніпулюєте в тілі самого циклу.
У наведеному нижче прикладі @empid використовується змінна предикату та змінюється її значення в полі BEGIN... Кінцевий блок:
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;
Додаткові параметри в циклі ЧАСУ можна використовувати для керування потоком за допомогою ключових слів CONTINUE і BREAK.