определение

Начинается с @

Время жизни: с момента объявления до конца выполнения процедуры, где объявлена, до конца процедуры, батча

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