Ms sql declare: DECLARE @local_variable (Transact-SQL) — SQL Server

Изучение переменных SQL для сценариев и разработки

Автор: Aubrey Love   |
Обновлено: 21 декабря 2022 г.   |
Комментарии (2)   | Связанный: Подробнее > TSQL

Проблема

Я вижу, что многие люди используют переменные SQL в Microsoft SQL Server, но не совсем понимают
концепция с языком T-SQL. В этом уроке мы рассмотрим объявление и использование переменных
в операторах SQL.

Решение

Давайте начнем с понимания того, что переменные SQL
не создаются, а декларируются. Да, есть разница. Создавать
означает, что вы создали объект в SQL Server, который останется после закрытия
ваш экземпляр SQL. Когда вы объявляете переменную в SQL Server, это временная
объект и будет использоваться только во время выполнения скрипта. переменные SQL не
существовать как сущность, но как значение объекта внутри скрипта.

Объявление переменной SQL

Как упоминалось ранее, мы «объявляем» переменные в SQL Server и присваиваем
им тип данных и значение в запросе SQL. Позже мы можем использовать это значение для возврата результирующего набора. Следовательно,
мы фактически используем слово «DECLARE» при установке переменной SQL и должны использовать @
символ, предшествующий имени переменной.

Основной синтаксис для объявления переменной, типа данных и значения переменной:
следующим образом:

 DECLARE @LOCAL_VARIABLE data_type = значение переменной
 

Мы также можем сначала объявить переменную, а затем использовать оператор set для определения ее значения:

 DECLARE @LOCAL_VARIABLE data_type

УСТАНОВИТЬ @LOCAL_VARIABLE = значение
 

Очень важно помнить, что переменные таковы, как они звучат.
это варьируется. Это означает, что вы можете изменить значение переменной в любое время.
Однако вы не можете изменить тип данных или имя переменной.

Мы создадим
в приведенном ниже примере кода, установите для нее значение 12 и запустите сценарий SELECT.
вызов этой переменной. Далее мы переназначим значение этой переменной и снова
запустите сценарий SELECT, чтобы увидеть разницу.

 DECLARE @LOCAL_VARIABLE INT
 
УСТАНОВИТЕ @LOCAL_VARIABLE = 12
ВЫБЕРИТЕ 12 * @LOCAL_VARIABLE AS 'var * 12'
 
УСТАНОВИТЕ @LOCAL_VARIABLE = 14
ВЫБЕРИТЕ 12 + @LOCAL_VARIABLE AS 'var + 14';
ИДТИ
 

Результат запроса:

Присвоение значений переменной SQL

Transact-SQL имеет два варианта присвоения значения переменной: установить и выбрать. Мы
использовал команду SET из предыдущего раздела для присвоения значения. Этот раздел будет
используйте оператор SELECT, чтобы присвоить наши значения. Мы можем выбрать строковое значение или вытащить
значение из таблицы для использования в качестве значения наших переменных.

В этом примере мы присваиваем строковое значение переменной, которую назовем «testvalue1»:

 DECLARE @testvalue1 VARCHAR(20)

SELECT @testvalue1 = 'Привет, мир!'

ПЕЧАТЬ @testvalue1;
ИДТИ
 

Результат запроса:

В следующем примере мы используем значение в поле «Имя».
столбец таблицы Person. Person в образце базы данных AdventureWorks2019. Ты
можно получить бесплатную копию образца базы данных
здесь.

В нашем примере кода мы рассматриваем его как любой другой оператор SELECT, но желаемый
value вызывается путем ссылки на значение нашей переменной. Другими словами,
мы присваиваем нашей переменной первое имя в таблице Person.Person, которое имеет BusinessEntityID
из 8.

 ЕГЭ AdventureWorks2019;
ИДТИ

ОБЪЯВИТЬ @testvalue2 КАК VARCHAR(20)

ВЫБЕРИТЕ @testvalue2 = [Имя]
ОТ Человека.Человека
ГДЕ BusinessEntityID = 8

ПЕЧАТЬ @testvalue2;
ИДТИ
 

Результат запроса:

Вы также можете объявить несколько переменных одновременно. Ниже мы расширим
в предыдущем примере кода, добавив значение столбца «LastName» из
наша таблица Person.Person.

 ЕГЭ AdventureWorks2019;
ИДТИ

ОБЪЯВИТЬ @testvalue2 КАК VARCHAR(20)
ОБЪЯВИТЬ @testvalue3 КАК VARCHAR(20)

ВЫБИРАТЬ
   @testvalue2 = [Имя]
 , @testvalue3 = [Фамилия]
ОТ Человека.Человека
ГДЕ BusinessEntityID = 8

ПЕЧАТЬ @testvalue2
ПЕЧАТЬ @testvalue3;
ИДТИ
 

Результат запроса:

Мы также можем присвоить значение переменной SQL из функции со скалярным значением.

 DECLARE @testvalue3 AS INT

ВЫБЕРИТЕ @testvalue3 = dbo.ufnGetStock(3)

ВЫБЕРИТЕ @testvalue3 AS [MyValue];
ИДТИ
 

Результат запроса:

Важно помнить, что переменные доступны только во время запроса
исполнение. Если пакет завершается разделителем пакетов «GO», то
вы больше не можете ссылаться на переменную.

Пример: Ссылаясь на наш первоначальный образец, если мы прекращаем партию, а затем
попробуем напечатать значение нашей переменной, получим ошибку.

 DECLARE @testvalue1 VARCHAR(20)
SELECT @testvalue1 = 'Привет, мир!'
ПЕЧАТЬ @testvalue1;
ИДТИ

ПЕЧАТЬ @testvalue1;
 

Результат запроса:

Как видно из приведенного выше набора результатов, оператор печати внутри пакета
выполнен успешно, но оператор печати за пределами пакета — нет. Это
потому что переменная больше не существует после завершения пакета.

ЗАЯВИТЬ, ЗАЯВИТЬ, ЗАЯВИТЬ. Могу ли я очистить код, если мне нужно объявить больше
чем одна переменная в пакете? Да, есть. При объявлении переменных и установке
их значения, вы можете разделить их запятой, не указывая DECLARE или SET
для каждой переменной.

В приведенном ниже примере мы объявим две переменные с помощью одного оператора DECLARE,
установите два значения с помощью одного оператора SELECT и распечатайте оба значения с помощью одного оператора PRINT.
заявление.

 ЕГЭ AdventureWorks2019;
ИДТИ

ОБЪЯВИТЬ @testvalue2 КАК VARCHAR(20), @testvalue3 КАК VARCHAR(20)

ВЫБИРАТЬ
    @testvalue2 = [Имя]
  , @testvalue3 = [Фамилия]
ОТ Человека.Человека
WHERE BusinessEntityID = 8 -- пункт WHERE

ПЕЧАТЬ @testvalue2 + ' ' + @testvalue3;GGO
 

Результат запроса:

Подведение итогов

В этом руководстве мы рассмотрели некоторые основы переменных SQL. Эти
являются основными строительными блоками, с которых каждый администратор баз данных и разработчик баз данных должен начать обучение
о переменных SQL. Мы узнали, что такое переменная, а что нет, как ее создать
или более переменных, и как использовать эти переменные в наших интересах.

Следующие шаги

Нажмите на ссылки ниже, чтобы продолжить чтение о переменных SQL:

  • Команда SQL Server INSERT с переменными

  • Переменные SQL в сценариях, функциях, хранимых процедурах, SQLCMD и многом другом

  • Переменные SQL для запросов и хранимых процедур в SQL Server, Oracle и PostgreSQL

  • Некоторые сложные ситуации при работе с SQL Server NULL

Об авторе

Обри Лав — администратор баз данных-самоучка с более чем шестилетним опытом проектирования, создания и мониторинга баз данных SQL Server в качестве администратора баз данных/специалиста по бизнес-аналитике. Сертификаты включают MCSA, A+, Linux+ и Google Map Tools с более чем 40-летним опытом работы в компьютерной индустрии. Обри впервые начал работать над ПК, когда они были представлены публике в конце 70-х.

Посмотреть все мои советы

Последнее обновление статьи: 21 декабря 2022 г.

сервер sql — как объявить переменную в TSQL и использовать в нескольких операторах

спросил

Изменено
2 года, 8 месяцев назад

Просмотрено
1к раз

Как я могу объявить переменную в T-SQL и использовать ее в нескольких операторах?

Например:

 DECLARE @STRDT DATE
НАБОР @STRDT '2017-01-01'
ВЫБЕРИТЕ ВЕРХНИЙ(10) *
ИЗ ТАБЛИЦЫ 1
ГДЕ START_DATE = @STRDT;
ВЫБЕРИТЕ ВЕРХНИЙ(10) *
ИЗ ТАБЛИЦЫ 2
ГДЕ START_DATE = @STRDT;
 

Прямо сейчас я могу правильно выполнить первый оператор, но не могу использовать объявленную переменную во втором операторе. Я получаю ошибку e

Необходимо объявить @STRDT

, когда я запускаю второй оператор выбора в SQL Server.

  • sql-сервер
  • tsql

5

Переменные существуют только в определенной области, которая находится внутри выполняемого оператора. Поэтому, когда у вас есть подобная логика в хранимой процедуре, она будет выполняться в одной и той же области, потому что это один и тот же пакет, поэтому переменная будет «работать» для обоих операторов. То же самое, когда вы хотите запустить его вручную — вам нужно запустить оба оператора вместе, чтобы получить то, что вы хотите. Это просто то, как это работает, и если вы запускаете оба оператора одновременно, переменная «работает» в обоих или нескольких операторах.

Чтобы узнать больше о них, обратитесь к следующим источникам:

  • https://learn.microsoft.com/en-us/sql/t-sql/language-elements/declare-local-variable-transact-sql
  • https://www.