SQL променливи: Деклариране, задаване и избор на променлива в SQL Server
⚡ Умно обобщение
Променливите на SQL Server са именувани обекти, които действат като заместители за единична стойност на данните в паметта. Променливата трябва да бъде декларирана с оператора DECLARE, преди да може да ѝ бъде присвоена стойност и да се използва повторно.

Какво е променлива в SQL Server?
In MS SQL сървър, променливите са обекти, които действат като заместители за местоположение в паметта. Променливата съдържа единична стойност на данните, която можете да прочетете и използвате повторно в рамките на пакет или процедура.
Типове променливи в 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.
Да предположим, че имаме маса на име '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, така че нищо не се отпечатва, както е показано по-долу.
Използване на 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)'















