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 сървър, променливите са обекти, които действат като заместители за местоположение в паметта. Променливата съдържа единична стойност на данните, която можете да прочетете и използвате повторно в рамките на пакет или процедура.

Типове променливи в 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 @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

Използване на 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, отпечатване 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' с две колони, както е показано по-долу. Тази таблица се използва в следващите примери.

Guru99 таблица с колони 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

Използване на 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, отпечатване на 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>)

Правила:

  • Затворете заявката в скоби.
  • Заявката трябва да е скаларна заявка, която връща един ред и една колона. В противен случай заявката ще изхвърли грешка.
  • Ако заявката върне нула редове, тогава променливата е ПРАЗНА, тоест NULL.

Преосмислете нашето „Guru99-футова маса.

Пример 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

Когато няма съвпадащи редове, променливата е ПРАЗНА, т.е. 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 вместо това оставя променливата непроменена, запазвайкиping каквато и стойност да е имала вече. Тази разлика е от значение, когато променливата е започнала с различна от 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как променливите получават и предават стойности, как се маркират неинициализирани или неправилно типизирани променливи и как се предлагат пренаписвания, базирани на множества, които заместват бавните цикли, управлявани от променливи. Разработчикът все още потвърждава всяка промяна спрямо действителните данни и натоварване.

Обобщете тази публикация с: