Переменные 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 @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
Выполнение запроса выводит значение, присвоенное при объявлении, как показано ниже.
Использование переменной SQL SET
Иногда требуется разделить объявление и инициализацию. Оператор 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.
Предположим, что у нас есть (см. таблицу ниже) названный 'GuruТаблица 99' с двумя столбцами, как показано ниже. Эта таблица используется в следующих примерах.
Пример 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, поэтому ничего не выводится, как показано ниже.
Использование переменной SQL SELECT
Подобно оператору 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>)
Правила:
- Запрос следует заключить в скобки.
- Запрос должен быть скалярным и возвращать одну строку и один столбец. В противном случае запрос выдаст ошибку.
- Если запрос возвращает ноль строк, то переменная пуста, то есть имеет значение NULL.
Пересмотрите наши «Guru99-футовый стол.
Пример 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
Если ни одна строка не соответствует условию, переменная становится пустой, то есть 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)'















