Buscar..


Sintaxis

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

Declarar una variable de tabla

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

Cuando creas una tabla normal, usas la sintaxis de CREATE TABLE Name (Columns) . Al crear una variable de tabla, utiliza la DECLARE @Name TABLE (Columns) .

Para hacer referencia a la variable de tabla dentro de una instrucción SELECT , SQL Server requiere que le dé un alias a la variable de tabla, de lo contrario obtendrá un error:

Debe declarar la variable escalar "@TableVariableName".

es decir

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

Actualizando una variable usando SET

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

1

Usando SET , solo puedes actualizar una variable a la vez.

Actualizando variables usando SELECT

Usando SELECT , puedes actualizar múltiples variables a la vez.

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

1

Hola


Cuando se utiliza SELECT para actualizar una variable de una columna de la tabla, si hay varios valores, utilizará el último valor. (Se aplican las reglas de orden normales: si no se da una clasificación, el orden no está garantizado).

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

Si no hay filas devueltas por la consulta, el valor de la variable no cambiará:

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

PRINT @Variable

1

Declara múltiples variables a la vez, con valores iniciales.

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

Operadores de asignación de compuestos

SQL Server 2008 R2

Operadores compuestos compatibles:

+= Añadir y asignar

-= Restar y asignar

*= Multiplica y asigna

/= Divide y asigna

%= Modulo y asignar

&= Bitwise AND y asignar

^= Bitwise XOR y asignar

|= Bitwise OR y asignar

Ejemplo de uso:

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

Actualizando variables seleccionando desde una tabla

Dependiendo de la estructura de sus datos, puede crear variables que se actualicen dinámicamente.

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)

En la mayoría de los casos, querrá asegurarse de que su consulta devuelva solo un valor al usar este método.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow