Microsoft SQL Server
Variables
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
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.