Змінні SQL: оголошення, встановлення та вибір змінної в SQL Server

⚡ Розумний підсумок

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

  • 📦 Визначення: Змінна SQL Server містить одне значення та діє як заповнювач для місця в пам'яті.
  • ???? Локальні та глобальні: SQL Server підтримує локальні змінні з префіксом @, які оголошують користувачі, та глобальні змінні, що підтримуються системою, з префіксом @@.
  • ???? ЗАЯВЛЯЄМО: Оператор DECLARE створює змінну та за замовчуванням ініціалізує її значенням NULL.
  • 🔀 Три методи призначення: Значення можна присвоїти під час DECLARE, за допомогою SET або за допомогою SELECT.
  • 🔎 Скалярні підзапити: SET та SELECT можуть зчитувати одне значення із запиту у змінну.
  • 🧠 SET проти SELECT: SET присвоює значення одній змінній та відповідає стандарту ANSI, тоді як SELECT може присвоювати значення кільком одночасно.

Змінні SQL Server: DECLARE, SET та SELECT

Що таке змінна в SQL Server?

In MS SQL ServerЗмінні – це об'єкти, що діють як тимчасові позначення для області пам'яті. Змінна містить одне значення даних, яке можна зчитувати та повторно використовувати в пакеті або процедурі.

Типи змінних у SQL: локальні, глобальні

MS SQL Server має два типи змінних:

  • Локальна змінна
  • Глобальна змінна

Однак користувач може створити лише локальну змінну. На рисунку нижче пояснюється два типи змінних, доступних у MS SQL Server.

Діаграма двох типів змінних у 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

Виконання запиту виводить значення, призначене під час оголошення, як показано нижче.

Вивід змінної, призначеної під час DECLARE, з друком значення 5

Використання змінної 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, друк 5

Приклад: Присвоєння значення кільком змінним за допомогою 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, друк 5 та UNIX

Приклад: Присвоєння значення змінній за допомогою скалярного підзапиту з використанням 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' з двома колонками, як показано нижче. Ця таблиця використовується в наступних прикладах.

GuruТаблиця 99 зі стовпцями Tutorial_ID та Tutorial_name, що використовуються в прикладах

Приклад 1: Коли підзапит повертає один рядок як результат

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

Оскільки підзапит повертає один відповідний рядок, змінна отримує це значення, як показано нижче.

Вивід скалярного підзапиту, призначеного за допомогою SET, з виведенням відповідної назви навчального посібника

Приклад 2: Коли підзапит повертає нуль рядків у результаті

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Оскільки підзапит не повертає жодних рядків, значення змінної має значення EMPTY, тобто NULL, тому нічого не виводиться, як показано нижче.

Вивід скалярного підзапиту SET, який не повертає рядків, залишаючи змінну 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, друк 5

Приклад: Присвоєння значення кільком змінним за допомогою 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, виведення 5 та UNIX

Приклад: Присвоєння значення змінній за допомогою підзапиту з використанням 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

Підзапит повертає один рядок, тому змінна містить це значення, як показано нижче.

Вивід скалярного підзапиту, призначеного за допомогою SELECT, з виведенням відповідної назви навчального посібника

Приклад 2: Коли підзапит повертає нуль рядків у результаті

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Якщо рядок не відповідає, змінна залишається ПУСТОЮ, тобто має значення NULL, як показано нижче.

Вивід скалярного підзапиту SELECT, який не повертає рядків, залишаючи змінну 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

Один рядок, що відповідає, встановлює значення змінної, як показано нижче.

Вивід звичайного присвоєння SELECT, що повертає один рядок

Запит 2: Запит повертає кілька рядків

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

Коли кілька рядків збігаються, змінна зберігає значення з останнього рядка, як показано нижче.

Вивід звичайного присвоєння SELECT, що повертає кілька рядків, keeping значення останнього рядка

Запит 3: Запит повертає нуль рядків

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

Коли жодні рядки не збігаються, змінна має значення EMPTY, тобто NULL, як показано нижче.

Вивід звичайного присвоєння SELECT, яке не повертає жодних рядків, залишаючи змінну NULL

Інші приклади змінних SQL

Оголошену змінну також можна використовувати всередині запиту, наприклад, у реченні WHERE для фільтрації рядків.

Запит:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

Змінна фільтрує запит і повертає відповідний рядок, як показано нижче.

Вивід використання змінної в реченні WHERE для фільтрації Guru99 стіл

Цікаві факти про змінні SQL Server!

  • Локальну змінну можна відобразити за допомогою команди PRINT, а також команди SELECT.
  • Тип даних таблиці не дозволяє використання 'AS' під час оголошення.
  • SET відповідає стандартам ANSI, тоді як SELECT — ні.
  • Також дозволено створювати локальну змінну з іменем @. Наприклад, її можна оголосити так:
'DECLARE @@ as VARCHAR (10)'

Поширені запитання

Після виконання DECLARE без присвоєння значення, змінна SQL Server містить значення NULL. Змінна існує, але не має значення, доки ви не присвоїте йому значення за допомогою DECLARE з =, SET або SELECT. Посилання на неї перед присвоєнням просто повертає NULL.

Коли підзапит не повертає рядків, SET присвоює змінній значення NULL та перезаписує будь-яке поточне значення. SELECT натомість залишає змінну незмінною, keeping яке б значення вона вже не мала. Ця різниця має значення, коли змінна починалася зі значення, відмінного від NULL.

Таблична змінна, оголошена як DECLARE @t TABLE(…), зберігає невеликий набір результатів, обмежений одним пакетом. На відміну від таблиці #temp, вона зберігається лише в межах свого пакета, не може бути змінена після створення та часто підходить для невеликих наборів даних.

Локальна змінна обмежена пакетом, збереженою процедурою або тригером, де вона оголошується, в межах одного сеансу. Ключове слово GO завершує пакет, тому на змінну, оголошену перед GO, не можна посилатися після неї.

Змінна може використовувати майже будь-який SQL Server тип даних, включаючи int, decimal, varchar, nvarchar, date, datetime, bit та table. Зіставте змінну зі стовпцем, який вона представляє, щоб уникнути неявних помилок перетворення.

Перепризначте змінну самій собі за допомогою SET, наприклад, SET @counter = @counter + 1. SELECT також працює: SELECT @total = @total + price. Цей шаблон керує циклами та підрахунками підсумків всередині скриптів та збережених процедур.

Так. Копілот GitHub може генерувати оператори DECLARE, SET та SELECT з коментарів природною мовою та пропонувати відповідні типи даних. Завжди перевіряйте згенеровані імена, типи та логіку присвоєння на відповідність вашій схемі, перш ніж запускати її у робочому середовищі.

Асистенти штучного інтелекту та машинного навчання tracяк змінні отримують та передають значення, позначають неініціалізовані або неправильно введені змінні та пропонують перезаписи на основі множин, які замінюють повільні цикли, керовані змінними. Розробник все одно перевіряє кожну зміну на відповідність фактичним даним та робочому навантаженню.

Підсумуйте цей пост за допомогою: