Как присвоить значение переменной в sql
Перейти к содержимому

Как присвоить значение переменной в sql

  • автор:

SQL-Ex blog

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

Добавил Sergey Moiseenko on Среда, 14 сентября. 2022

  • Что такое переменные?
  • Что такое типы переменных?
  • Как объявить переменную?
  • Как установить переменную?
  • Зачем использовать переменные?
  • Как использовать переменные в хранимых процедурах?
  • Как использовать переменные в функциях?
  • Как использовать переменные с SQLCMD?
  • Как использовать переменные в скриптах?
  • Как использовать переменные с SSIS?

Что такое переменные?

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

Что такое типы переменных?

  • Числовые (int, smallint, money, decimal, bigint, numeric, bit, smallmoney, tinyint, float, real)
  • Дата и/или время (date, datetime2, datetime, datetimeoffset, smalldatetime, time)
  • Символы (char, varchar, text, nchar, nvarchar и ntext)
  • Двоичные типы данных, например, image
  • XML
  • sql_variant, который может поддерживать различные типы данных
  • Uniqueidentifier
  • Переменные пространственной геометрии и пространственной географии
  • Курсоры
  • Предложение WHERE
  • а также табличные переменные

Как объявить переменную SQL?

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

DECLARE @имя_переменной тип_данных

Для объявления переменной необходимо использовать слово DECLARE, после чего указать имя с префиксом @ и тип данных.

В следующем примере показано, как объявить переменную типа smallint.

DECLARE @myvariable smallint

Следующий пример показывает, как объявить и установить значение переменной, и использовать ее в операторе SELECT.

DECLARE @myvariable smallint = 2 
SELECT CONCAT('The variable value is', SPACE(1), @myvariable) as myvariable

Следующий пример объявляет переменную @mytext типа varchar и присваивает ей значение Hello.

DECLARE @mytext nvarchar = 'Hello' 
SELECT @mytext message

Обратите внимание, что результат отображает только первую букву слова Hello. Это происходит потому, что значением по умолчанию типа данных nvarchar или varchar является единственный символ. Если вам нужно больше символов, укажите длину. Следующий пример использует длину 10 символов.

DECLARE @mytext nvarchar(10) = 'Hello' 
SELECT @mytext message

Следующий пример показывает, как объявить переменную типа даты и присвоить ей значение. Затем мы отображаем дату в формате dd-MM-yyyy.

DECLARE @mydate datetime = '2020-01-01 5:00:00' 
SELECT FORMAT(@mydate, 'dd-MM-yyyy') message

Как установить значение переменной SQL?

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

Вот другой подход установить переменную двумя строчками кода, а третья строка используется для вывода значения.

DECLARE @mydecimal decimal(10,5) 
SELECT @mydecimal = 89.9899
SELECT @mydecimal message

Второй пример присваивает значение непосредственно в операторе DECLARE, как в примерах выше.

DECLARE @mydecimal decimal(10,5) = 89.9899 
SELECT @mydecimal message

Третий пример показывает как объявить переменную, а затем присвоить ей значение с помощью оператора SET во второй строке кода.

DECLARE @mydecimal decimal(10,5) 
SET @mydecimal = 89.9899
SELECT @mydecimal message

Результаты для всех трех примеров будут одинаковы.

Географические переменные

SQL Server имеет геопространственные типы данных, и в следующем примере мы объявляем географическую переменную с именем location, и присваиваем ей значения.

DECLARE @Location GEOGRAPHY 
SET @Location = geography::STGeomFromText('LINESTRING(47.653 -89.358, 48.1 -89.320, 49.0 -88.28)', 4326)
SELECT @Location

Ниже показан результат.

Чтобы больше узнать о типах данных Geography и Geometry, обратитесь к следующей статье.

Табличные переменные

Еще одним типом переменных является табличная переменная. Она подобна таблице, но является переменной. Вы используете префикс @ в имени переменной, а в остальном она подобна базовой таблице.

Следующий пример создает переменную с именем @TestTabe, а затем вставляет значения и выполняет выборку.

DECLARE @TestTable TABLE 
(
ID INT,
Name NVARCHAR(40)
)
INSERT INTO @TestTable values(1,'John')
SELECT * from @TestTable

Более подробно о табличных переменных вы можете прочитать в статье.

Зачем использовать переменные SQL?

Переменные в T-SQL позволяют создавать интеллектуальный и динамичный код. Это дает больше возможностей пользователю для получения информации удобным способом, автоматизировать задачи и повторно использовать код. Все языки программирования используют переменные, и T-SQL не является исключением.

Как использовать переменные в хранимых процедурах?

Хранимые процедуры очень популярны в SQL Server. Они используются чаще, чем функции, во многом благодаря своей гибкости и простоте использования.

В следующем примере показывается, как создать хранимую процедуру с именем dbo.uspGetAddress. Входным параметром является @City, и хранимая процедура выведет все столбцы таблицы Person.address, когда город равен городу, переданному через аргумент процедуры. Выполните этот код в своей базе данных AdventureWorks.

CREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) 
AS
SELECT *
FROM Person.Address
WHERE City = @City
GO

В этом примере значением входного параметра будет New York.

EXEC dbo.uspGetAddress @City = 'New York'

Более подробно о хранимых процедурах можно узнать в статье.

Как использовать переменные в функциях SQL?

Вы можете также использовать переменные с функциями. Следующий пример показывает, как создать функцию, которая принимает сумму денег в USD, курс обмена и вычисляет сумму в евро.

CREATE FUNCTION dbo.euros(@amount decimal(10,5), @rate decimal(10,5)) 
RETURNS decimal(10,5)
AS
BEGIN
RETURN @amount*@rate
END

Следующий пример показывает вызов этой функции.

SELECT dbo.euros(500,1.13) as euros

Как использовать переменные с SQLCMD?

SQLCMD — это командная строка SQL Server. Если вам нравится автоматизировать задачи с помощью bat-файлов, SQLCMD — это то, что вам нужно. Если вы не знакомы с SQLCMD, но хотите познакомиться, обратитесь к следующей статье.

В командной строке Windows выполните эту команду для подключения к SQL, используя аккаунт Windows.

В sqlcmd перейдем к базе данных AdventureWorks, как показано ниже.

1> use adventureworks2019
2> go

Следующий пример установит переменную с именем tablename и значением humanresources.department, а затем сделает выборку из этой переменной.

1> :setvar tablename humanresources.department
1> select * from $(tablename)
2> go

Если все правильно, вы увидите данные в этой таблице.

Как использовать переменные в скрипте?

Вы можете также передать переменные в скрипт. Следующий пример создаст переменную с именем columnname1. Мы присвоим ей значение DepartmentID.

В примере мы создадим скрипт с именем myquery.sqlЮ который сохраним в папке sqlcmd.

USE AdventureWorks2019
GO
SELECT
$(columnname1)
from
[HumanResources].[Department]

Выйдите из sqlcmd, если вы еще находитесь там, и в командной строке Windows выполните команду:

sqlcmd -v columnname1 =DepartmentID -i c:\sqlcmd\myquery.sql

В командной строке будет выполнен оператор «select departmentid from humanresources.department».

Как использовать переменные в SSIS?

Переменные SSIS совершенно отличаются от переменных T-SQL. SSIS — это графическая среда, используемая для интеграции данных и которая имеет свои собственные переменные. Чтобы увидеть переменные в проекте SSIS, пройдите в Extensions > SSIS >Variables или для более ранних версий VS — SSIS > Variables.

Вы можете добавлять, удалять переменные на панели variables.

Существуют различные типы переменных в SSIS, например, Int32, int64, Object и Sbyte.

  • SSIS Variable and Expression Example — Part 1
  • Getting Started with SQL Server Integration Services SSIS Parameters vs. Variables
  • Setup Environment Variables in SQL Server Integration Services

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Автор не разрешил комментировать эту запись

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

P.S. Вообще запрос немного странный, вы пытаетесь получить некую «последнюю» запись. Но Oracle как и другие СУБД не гарантирует порядка выбора записей без указания точного порядка сортировки. Т.е. «последней» (с максимальным rownum) теоретически может оказаться какая угодно запись.

Отслеживать
ответ дан 14 сен 2016 в 12:42
44.1k 3 3 золотых знака 35 35 серебряных знаков 66 66 бронзовых знаков

1) Присвоение переменной из запроса делается следующим синтаксисом.

declare email varchar(4000); begin select email into email from имя таблицы where . end; 

2) В такой запрос должно возвращаться ровно одно значение, не больше не меньше, иначе оракл выдаст необработанное исключение. Если у вас может возвращаться пустое значение можно либо обрабатывать это исключение или возвращать максимальное значение через функцию max.

3) Если вам нужно вывести список всех адресов через запятую, можно в выборке использовать запросе функцию LISTAGG:

 select LISTAGG (email,',') WITHIN GROUP (ORDER BY email) into email from имя таблицы where id between 10 and 100; 

Как присвоить значение переменной в sql

Для создания сложных запросов, выполняемых в несколько этапов, в SQL предусмотрены переменные.

В переменных могут сохраняться результаты вычисления встроенных функций и констант.

Для использования переменной, ее надо предварительно « объявить » , выполнив команду DECLARE языка SQL. Команда DECLARE имеет следующий формат: DECLARE , где — это название объявляемой переменной, а — тип данных, хранимых в ней. Названия переменных начинаются с символа « @ » , после которого могут использоваться буквы латинского алфавита, цифры и знаки « @ » , « $ » , « % » , « & » , « ~ » , « _ » .

Поддерживаются следующие основные типы данных:

  • Geometry — пространственный объект;
  • BigInt — целочисленное значение в диапазоне от -2 63 -1 до 2 63 (от — 9,223,372,036,854,775,808 по +9,223,372,036,854,775,807 );
  • Int — целочисленное значение в диапазоне от -2 31 ( -2,147,483,648 ) to 2 31 -1 ( 2,147,483,647 );
  • SmallInt — целочисленное значение в диапазоне от -2 15 ( -32,768 ) to 2 15 -1 ( 32,767 );
  • Double , Float , Real — число с плавающей точкой;
  • char , varchar — строковое значение.

Переменным можно присваивать только значения соответствующего типа данных. Для задания значения переменной используется команда SET языка SQL, имеющая формат SET = , где — выражение составленное из числовых и строковых функций и констант, соединенных знаками сложения, вычитания, умножения и деления, и сгруппированных с помощью скобок.

Использование переменных

DECLARE @i Int; SET @i = 2+2; SELECT @i*3

В примере объявляется переменная @g типа Int . Для переменной задается значение — результат вычисления выражения 2+2 , после чего значение переменной умноженной на 3 выводится в область ответа с помощью ключевого слова SELECT .

Переменные и управляющие конструкции

Переменная представляет именованный объект, который хранит некоторое значение. Для определения переменных применяется выражение DECLARE , после которого указывается название и тип переменной. При этом название локальной переменной должно начинаться с символа @ :

DECLARE @название_переменной тип_данных

Например, определим переменную name, которая будет иметь тип NVARCHAR:

DECLARE @name NVARCHAR(20)

Также можно определить через запятую сразу несколько переменных:

DECLARE @name NVARCHAR(20), @age INT

С помощью выражения SET можно присвоить переменной некоторое значение:

DECLARE @name NVARCHAR(20), @age INT; SET @name='Tom'; SET @age = 18;

Так как @name предоставляет тип NVARCHAR, то есть строку, то этой переменной соответственно и присваивается строка. А переменной @age присваивается число, так как она представляет тип INT.

Выражение PRINT возвращает сообщение клиенту. Например:

PRINT 'Hello World'

И с его помощью мы можем вывести значение переменной:

DECLARE @name NVARCHAR(20), @age INT; SET @name='Tom'; SET @age = 18; PRINT 'Name: ' + @name; PRINT 'Age: ' + CONVERT(CHAR, @age);

При выполнении скрипта внизу SQL Server Management Studio отобразится значение переменных:

Функция Print в T-SQL

Также можно использовать для получения значения команду SELECT :

DECLARE @name NVARCHAR(20), @age INT; SET @name='Tom'; SET @age = 18; SELECT @name, @age;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *