Поиск…


Синтаксис

  • DECLARE @VariableName DataType [= Value];
  • SET @VariableName = Value;

Объявление переменной таблицы

DECLARE @Employees TABLE
(
    EmployeeID INT NOT NULL PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL,
    LastName NVARCHAR(50) NOT NULL,
    ManagerID INT NULL
)

Когда вы создаете обычную таблицу, вы используете синтаксис CREATE TABLE Name (Columns) . При создании переменной таблицы используется DECLARE @Name TABLE (Columns) .

Чтобы ссылаться на переменную таблицы внутри SELECT , SQL Server требует, чтобы вы указали переменную таблицы как псевдоним, иначе вы получите сообщение об ошибке:

Должен объявить скалярную переменную «@TableVariableName».

т.е.

DECLARE @Table1 TABLE (Example INT)
DECLARE @Table2 TABLE (Example INT)

/*
-- the following two commented out statements would generate an error:
SELECT *
FROM @Table1
INNER JOIN @Table2 ON @Table1.Example = @Table2.Example

SELECT *
FROM @Table1
WHERE @Table1.Example = 1
*/

-- but these work fine:
SELECT *
FROM @Table1 T1
INNER JOIN @Table2 T2 ON T1.Example = T2.Example

SELECT *
FROM @Table1 Table1
WHERE Table1.Example = 1

Обновление переменной с помощью SET

DECLARE @VariableName INT
SET @VariableName = 1
PRINT @VariableName

1

Используя SET , вы можете обновлять только одну переменную за раз.

Обновление переменных с помощью SELECT

Используя SELECT , вы можете обновлять сразу несколько переменных.

DECLARE @Variable1 INT, @Variable2 VARCHAR(10)
SELECT @Variable1 = 1, @Variable2 = 'Hello'
PRINT @Variable1
PRINT @Variable2

1

Привет


При использовании SELECT для обновления переменной из столбца таблицы, если имеется несколько значений, она будет использовать последнее значение. (Применяются правила нормального порядка - если сортировка не задана, заказ не гарантируется).

CREATE TABLE #Test (Example INT)
INSERT INTO #Test VALUES (1), (2)

DECLARE @Variable INT
SELECT @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

2

SELECT TOP 1 @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

1

Если в запросе нет строк, значение переменной не изменится:

SELECT TOP 0 @Variable = Example
FROM #Test
ORDER BY Example ASC

PRINT @Variable

1

Объявлять сразу несколько переменных с начальными значениями

DECLARE 
  @Var1 INT = 5, 
  @Var2 NVARCHAR(50) = N'Hello World', 
  @Var3 DATETIME = GETDATE()

Операторы вспомогательного присваивания

SQL Server 2008 R2

Поддерживаемые составные операторы:

+= Добавить и назначить

-= Вычесть и назначить

*= Умножить и назначить

/= Разделить и назначить

%= Modulo и назначить

&= Побитовое И и назначить

^= Побитовое XOR и назначить

|= Побитовое ИЛИ и назначить

Пример использования:

DECLARE @test INT = 42;
SET @test += 1;
PRINT @test;    --43
SET @test -= 1;
PRINT @test;    --42
SET @test *= 2
PRINT @test;    --84
SET @test /= 2;
PRINT @test;    --42

Обновление переменных путем выбора из таблицы

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

DECLARE @CurrentID int = (SELECT TOP 1 ID FROM Table ORDER BY CreateDate desc)


DECLARE @Year int = 2014
DECLARE @CurrentID int = (SELECT ID FROM Table WHERE Year = @Year)

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow