Как вывести переменную в sql
Перейти к содержимому

Как вывести переменную в sql

  • автор:

Как вывести переменную в sql

Через переменные мы можем передавать данные в запросы. И также мы можем получать данные, которые являются результатом запросов, в переменные. Например, при выборке из таблиц с помощью команды SELECT мы можем извлекать данные в переменную с помощью следующего синтаксиса:

SELECT @переменная_1 = спецификация_столбца_1, @переменная_2 = спецификация_столбца_2, . @переменная_N = спецификация_столбца_N

Кроме того, в выражении SET значение, присваиваемое переменной, также может быть результатом команды SELECT.

Например, пусть у нас будут следующие таблицы:

CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); CREATE TABLE Customers ( Id INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT IDENTITY PRIMARY KEY, ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE, CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE, CreatedAt DATE NOT NULL, ProductCount INT DEFAULT 1, Price MONEY NOT NULL );

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

DECLARE @maxPrice MONEY, @minPrice MONEY, @dif MONEY, @count INT SET @count = (SELECT SUM(ProductCount) FROM Orders); SELECT @minPrice=MIN(Price), @maxPrice = MAX(Price) FROM Products SET @dif = @maxPrice - @minPrice; PRINT 'Всего продано: ' + STR(@count, 5) + ' товарa(ов)'; PRINT 'Разница между максимальной и минимальной ценой: ' + STR(@dif)

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

Переменные @min и @max хранят соответственно минимальное и максимальное значения столбца Price из таблицы Products, а переменная @dif — разницу между этими значениями. И подобно простым значениям, переменные также могут участвовать в операциях.

Переменные в запросах в T-SQL

DECLARE @sum MONEY, @id INT, @prodid INT, @name NVARCHAR(20); SET @id=2; SELECT @sum = SUM(Orders.Price*Orders.ProductCount), @name=Products.ProductName, @prodid = Products.Id FROM Orders INNER JOIN Products ON ProductId = Products.Id GROUP BY Products.ProductName, Products.Id HAVING Products.Id=@id PRINT 'Товар ' + @name + ' продан на сумму ' + STR(@sum)

Здесь извлекаемые данные из двух таблиц Products и Orders группируются по столбцам Id и ProductName из таблицы Products. Затем данные фильтруются по столбцу Id из Products. А извлеченные данные попадают в переменные @sum, @name, @prodid.

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

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

Как вывести переменную в 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 .

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

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

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

Комментарии

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

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

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

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