Змінні SQL: оголошення, встановлення та вибір змінної в SQL Server
⚡ Розумний підсумок
Змінні SQL Server – це іменовані об'єкти, які діють як тимчасові позначення для одного значення даних у пам'яті. Змінну необхідно оголосити за допомогою оператора DECLARE, перш ніж їй можна буде присвоїти значення та використовувати повторно.

Що таке змінна в SQL Server?
In MS SQL ServerЗмінні – це об'єкти, що діють як тимчасові позначення для області пам'яті. Змінна містить одне значення даних, яке можна зчитувати та повторно використовувати в пакеті або процедурі.
Типи змінних у SQL: локальні, глобальні
MS SQL Server має два типи змінних:
- Локальна змінна
- Глобальна змінна
Однак користувач може створити лише локальну змінну. На рисунку нижче пояснюється два типи змінних, доступних у MS SQL Server.
Локальна змінна
- Користувач оголошує локальну змінну.
- За замовчуванням ім'я локальної змінної починається з @.
- Кожна локальна змінна має область дії, що відповідає поточному пакету або процедурі в межах заданого сеансу.
Глобальна змінна
- Система зберігає глобальну змінну; користувач не може її оголосити.
- Ім'я глобальної змінної починається з @@.
- Він зберігає інформацію, пов'язану із сеансом.
Як ОГОЛОШИТИ змінну в SQL
Перед використанням будь-якої змінної в пакеті або процедурі в SQL, ви повинні оголосити її. Команда DECLARE створює змінну, яка діє як заповнювач для місця в пам'яті. Тільки після оголошення змінну можна використовувати в наступній частині пакетної обробки або процедури.
Синтаксис TSQL:
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
Правила:
- Ініціалізація необов'язкова під час оголошення.
- За замовчуванням, DECLARE ініціалізує змінну значенням NULL.
- Використання ключового слова "AS" необов'язкове.
- Щоб оголосити більше однієї локальної змінної, додайте кому після першого визначення, потім вкажіть ім'я наступної змінної та тип даних.
Приклади оголошення змінної
Запит: з "AS"
DECLARE @COURSE_ID AS INT;
Запит: без "AS"
DECLARE @COURSE_NAME VARCHAR (10);
Запит: DECLARE дві змінні
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
Присвоєння значення змінній SQL
Ви можете присвоїти значення змінній трьома способами:
- Під час оголошення змінних за допомогою ключового слова DECLARE.
- Використання SET.
- Використання SELECT.
Давайте детально розглянемо всі три способи.
Під час оголошення змінної за допомогою ключового слова DECLARE
Синтаксис T-SQL:
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
Тут, після типу даних, можна використовувати '=', а потім значення, яке потрібно присвоїти.
Запит:
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
Виконання запиту виводить значення, призначене під час оголошення, як показано нижче.
Використання змінної SET у SQL
Іноді потрібно розділити оголошення та ініціалізацію. SET присвоює значення змінній після її оголошення. Нижче наведено різні способи присвоєння значень за допомогою SET.
Приклад: Присвоєння значення змінній за допомогою SET
Синтаксис:
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
Запит:
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
Виконання скрипта повертає значення, призначене за допомогою SET, як показано нижче.
Приклад: Присвоєння значення кільком змінним за допомогою SET
Синтаксис:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
Правило: Одне ключове слово SET може присвоїти значення лише одній змінній.
Запит:
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Два оператори PRINT повертають обидва присвоєні значення, як показано нижче.
Приклад: Присвоєння значення змінній за допомогою скалярного підзапиту з використанням SET
Синтаксис:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
Правила:
- Візьміть запит у дужки.
- Запит має бути скалярним запитом, тобто він повертає лише один рядок та один стовпець. В іншому випадку запит викличе помилку.
- Якщо запит повертає нуль рядків, то змінна встановлюється на EMPTY, тобто NULL.
Припустимо, що ми маємо таблиця названийGuru99' з двома колонками, як показано нижче. Ця таблиця використовується в наступних прикладах.
Приклад 1: Коли підзапит повертає один рядок як результат
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
Оскільки підзапит повертає один відповідний рядок, змінна отримує це значення, як показано нижче.
Приклад 2: Коли підзапит повертає нуль рядків у результаті
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Оскільки підзапит не повертає жодних рядків, значення змінної має значення EMPTY, тобто NULL, тому нічого не виводиться, як показано нижче.
Використання змінної SELECT у SQL
Так само, як і SET, ви також можете використовувати SELECT для присвоєння значень змінним після їх оголошення за допомогою DECLARE. Нижче наведено різні способи присвоєння значення за допомогою SELECT.
Приклад: Присвоєння значення змінній за допомогою SELECT
Синтаксис:
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
Запит:
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
Присвоєння SELECT виводить значення, як показано нижче.
Приклад: Присвоєння значення кільком змінним за допомогою SELECT
Синтаксис:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
Правило: На відміну від SET, SELECT може присвоювати значення кільком змінним, розділеним комами.
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
Обидві змінні присвоюються в одному SELECT, як показано нижче.
Приклад: Присвоєння значення змінній за допомогою підзапиту з використанням SELECT
Синтаксис:
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
Правила:
- Візьміть запит у дужки.
- Запит має бути скалярним запитом, який повертає один рядок та один стовпець. В іншому випадку запит викличе помилку.
- Якщо запит повертає нуль рядків, то змінна має значення EMPTY, тобто NULL.
Переосмислити наше «GuruСтіл 99 футів.
Приклад 1: Коли підзапит повертає один рядок як результат
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
Підзапит повертає один рядок, тому змінна містить це значення, як показано нижче.
Приклад 2: Коли підзапит повертає нуль рядків у результаті
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
Якщо рядок не відповідає, змінна залишається ПУСТОЮ, тобто має значення NULL, як показано нижче.
Приклад 3: Присвоєння значення змінній за допомогою звичайного оператора SELECT
Синтаксис:
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
Правила:
- На відміну від SET, якщо запит повертає кілька рядків, то значення змінної встановлюється на значення останнього рядка.
- Якщо запит повертає нуль рядків, то змінна встановлюється на EMPTY, тобто NULL.
Запит 1: Запит повертає один рядок
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
Один рядок, що відповідає, встановлює значення змінної, як показано нижче.
Запит 2: Запит повертає кілька рядків
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
Коли кілька рядків збігаються, змінна зберігає значення з останнього рядка, як показано нижче.
Запит 3: Запит повертає нуль рядків
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
Коли жодні рядки не збігаються, змінна має значення EMPTY, тобто NULL, як показано нижче.
Інші приклади змінних SQL
Оголошену змінну також можна використовувати всередині запиту, наприклад, у реченні WHERE для фільтрації рядків.
Запит:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
Змінна фільтрує запит і повертає відповідний рядок, як показано нижче.
Цікаві факти про змінні SQL Server!
- Локальну змінну можна відобразити за допомогою команди PRINT, а також команди SELECT.
- Тип даних таблиці не дозволяє використання 'AS' під час оголошення.
- SET відповідає стандартам ANSI, тоді як SELECT — ні.
- Також дозволено створювати локальну змінну з іменем @. Наприклад, її можна оголосити так:
'DECLARE @@ as VARCHAR (10)'















