Локальные переменные
Начинается с @
Время жизни: с момента объявления до конца выполнения процедуры, где объявлена, или батча
Инструкция DECLARE инициализирует переменную Transact-SQL следующими значениями:
- Назначение имени. Первым символом имени должен быть одиночный символ
@. - Назначение длины и типа данных, определяемого системой или пользователем. Для числовых переменных задаются также точность и масштаб. Для переменных типа XML может быть назначена необязательная коллекция схем.
- Задание значения
NULL.
Например, следующая DECLARE инструкция создает локальную переменную @mycounter с типом данных int . По умолчанию значение этой переменной равно NULL.
DECLARE @MyCounter INT;DECLARE @LastName NVARCHAR(30), @FirstName NVARCHAR(20), @StateProvince NCHAR(2);Будет ошибка
DECLARE @MyVariable INT;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an errorЧтобы назначить значение переменной, используйте инструкцию SET
USE AdventureWorks2022;
GO
-- Declare two variables.
DECLARE @FirstNameVariable NVARCHAR(50),
@PostalCodeVariable NVARCHAR(15);
-- Set their values.
SET @FirstNameVariable = N'Amy';
SET @PostalCodeVariable = N'BA5 3HX';
-- Use them in the WHERE clause of a SELECT statement.
SELECT LastName,
FirstName,
JobTitle,
City,
StateProvinceName,
CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
OR PostalCode = @PostalCodeVariable;
GOМожно вот так:
USE AdventureWorks2022;
GO
DECLARE @EmpIDVariable INT;
SELECT @EmpIDVariable = MAX(EmployeeID)
FROM HumanResources.Employee;
GOНеочевидно:
Если инструкция возвращает несколько строк и переменная ссылается на нескаларовое SELECT выражение, переменная задается значением, возвращаемым для выражения в последней строке результирующий набор.
Использование
- Счетчики
- Фильтры
Глобальные переменные
Глобальные переменные начинаются с двух символов @@ (хотя в документации они называются функциями)
Лучше не использовать, может быть конфликт имен. Есть системные функции:
@@SERVERNAME– содержит имя экземпляра MS SQL Server;@@VERSION– информация о версии SQL Server;@@ROWCOUNT– содержит количество строк, обработанных последней выполненной командой;@@SPID– идентификатор текущего процесса;@@TRANCOUNT– уровень вложенности транзакций;@@NESTLEVEL– уровень вложенности при выполнении хранимых процедур и триггеров;@@OPTIONS– текущие настройки серверных параметров;@@ERROR– содержит код ошибки последней выполненной команды;@@IDENTITY– последнее значение счетчика, которое было использовано после добавления строки. имба@@CURSOR_ROWS– возвращает количество записей, полученных последней командой открытия курсора. Получение имени экземпляра:
SELECT @@SERVERNAME