Variables SQL: Declarar, establecer y seleccionar variables en SQL Server

⚡ Resumen inteligente

Las variables de SQL Server son objetos con nombre que actúan como marcadores de posición para un único valor de datos en la memoria. Una variable debe declararse con la instrucción DECLARE antes de que se le pueda asignar un valor y reutilizar.

  • 📦 Definición: Una variable de SQL Server almacena un único valor y actúa como marcador de posición para una ubicación de memoria.
  • ???? Local y global: SQL Server admite variables locales con el prefijo @ que declaran los usuarios, y variables globales mantenidas por el sistema con el prefijo @@.
  • 📝 DECLARAR: La instrucción DECLARE crea una variable y, por defecto, la inicializa a NULL.
  • 🔀 Tres métodos de asignación: Se puede asignar un valor durante DECLARE, con SET o con SELECT.
  • 🔎 Subconsultas escalares: Tanto SET como SELECT pueden leer un único valor de una consulta y almacenarlo en una variable.
  • 🧠 CONFIGURAR versus SELECCIONAR: SET asigna una variable y sigue el estándar ANSI, mientras que SELECT puede asignar varias a la vez.

Variables de SQL Server: DECLARE, SET y SELECT

¿Qué es una variable en SQL Server?

In MS SQL ServerLas variables son objetos que actúan como marcadores de posición para una ubicación de memoria. Una variable almacena un único valor de datos que se puede leer y reutilizar en un lote o procedimiento.

Tipos de variables en SQL: local, global

MS SQL Server tiene dos tipos de variables:

  • Variable local
  • Variable global

Sin embargo, un usuario solo puede crear una variable local. La siguiente figura explica los dos tipos de variables disponibles en MS SQL Server.

Diagrama de los dos tipos de variables en SQL Server: variables locales y variables globales.

Variable local

  • Un usuario declara la variable local.
  • Por defecto, el nombre de una variable local comienza con @.
  • Cada variable local está limitada al lote o procedimiento actual dentro de una sesión determinada.

Variable global

  • El sistema mantiene la variable global; un usuario no puede declarar una.
  • El nombre de una variable global comienza con @@.
  • Almacena información relacionada con la sesión.

Cómo DECLARAR una variable en SQL

Antes de utilizar cualquier variable en un lote o procedimiento en SQLDebes declararla. El comando DECLARE crea una variable que actúa como marcador de posición para una ubicación de memoria. Solo después de realizar la declaración, la variable podrá utilizarse en la siguiente parte del lote o procedimiento.

Sintaxis TSQL:

DECLARE  { @LOCAL_VARIABLE[AS] data_type  [ = value ] }

Reglas:

  • La inicialización es opcional al declarar.
  • Por defecto, DECLARE inicializa la variable a NULL.
  • El uso de la palabra clave "AS" es opcional.
  • Para declarar más de una variable local, agregue una coma después de la primera definición, luego dé el nombre de la siguiente variable y tipo de datos.

Ejemplos de declaración de una variable

Consulta: Con 'AS'

DECLARE @COURSE_ID AS INT;

Consulta: Sin 'AS'

DECLARE @COURSE_NAME VARCHAR (10);

Consulta: DECLARAR dos variables

DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);

Asignar un valor a la variable SQL

Puedes asignar un valor a una variable de las siguientes tres maneras:

  • Durante la declaración de variables utilizando la palabra clave DECLARE.
  • Usando SET.
  • Usando SELECT.

Analicemos las tres opciones en detalle.

Durante la declaración de variables usando la palabra clave DECLARE

Sintaxis T-SQL:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

Aquí, después del tipo de dato, puede usar '=' seguido del valor que se va a asignar.

consulta:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Al ejecutar la consulta, se imprime el valor asignado durante la declaración, como se muestra a continuación.

Salida de una variable asignada durante DECLARE, imprimiendo el valor 5

Uso de variables SQL SET

A veces, es conveniente mantener separadas la declaración y la inicialización. SET asigna un valor a la variable después de haberla declarado. A continuación, se muestran las diferentes formas de asignar valores mediante SET.

Ejemplo: Asignar un valor a una variable usando SET

Sintaxis:

DECLARE @Local_Variable <Data_Type>
SET @Local_Variable =  <Value>

consulta:

DECLARE @COURSE_ID AS INT
SET @COURSE_ID = 5
PRINT @COURSE_ID

Al ejecutar el script se devuelve el valor asignado con SET, que se muestra a continuación.

Salida de la asignación de un valor a una variable usando SET, imprimiendo 5

Ejemplo: Asignar un valor a varias variables usando SET

Sintaxis:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>,
SET @Local_Variable_1 = <Value_1>
SET @Local_Variable_2 = <Value_2>

Regla: Una palabra clave SET solo puede asignar un valor a una variable.

consulta:

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SET @COURSE_ID = 5
SET @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Las dos instrucciones PRINT devuelven ambos valores asignados, como se muestra a continuación.

Salida de la asignación de dos variables con SET, imprimiendo 5 y UNIX

Ejemplo: Asignar un valor a una variable con una subconsulta escalar usando SET

Sintaxis:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)

Reglas:

  • Encierre la consulta entre paréntesis.
  • La consulta debe ser escalar, es decir, debe devolver solo una fila y una columna. De lo contrario, la consulta generará un error.
  • Si la consulta devuelve cero filas, la variable se establece en VACÍA, es decir, NULA.

Supongamos que tenemos el mesa llamado 'Guru99' con dos columnas, como se muestra a continuación. Esta tabla se utiliza en los siguientes ejemplos.

GuruTabla 99 con las columnas Tutorial_ID y Tutorial_name utilizadas en los ejemplos

Ejemplo 1: Cuando la subconsulta devuelve una fila como resultado.

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

Como la subconsulta devuelve una fila coincidente, la variable recibe ese valor, como se muestra a continuación.

Salida de una subconsulta escalar asignada con SET, que imprime el nombre del tutorial coincidente.

Ejemplo 2: Cuando la subconsulta devuelve cero filas como resultado.

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Como la subconsulta no devuelve ninguna fila, el valor de la variable es VACÍO, es decir, NULO, por lo que no se imprime nada, como se muestra a continuación.

Salida de una subconsulta escalar SET que no devuelve filas, dejando la variable NULL.

Uso de variables SQL SELECT

Al igual que con SET, también puedes usar SELECT para asignar valores a variables después de declararlas con DECLARE. A continuación, se muestran diferentes maneras de asignar un valor usando SELECT.

Ejemplo: Asignar un valor a una variable usando SELECT

Sintaxis:

DECLARE @LOCAL_VARIABLE <Data_Type>
SELECT @LOCAL_VARIABLE = <Value>

consulta:

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = 5
PRINT @COURSE_ID

La asignación SELECT imprime el valor, como se muestra a continuación.

Salida de la asignación de un valor a una variable usando SELECT, imprimiendo 5

Ejemplo: Asignar un valor a varias variables usando SELECT

Sintaxis:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>,  @Local_Variable _2 = <Value_2>

Regla: A diferencia de SET, SELECT puede asignar un valor a varias variables separadas por comas.

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

Ambas variables se asignan en una sola sentencia SELECT, como se muestra a continuación.

Salida de la asignación de dos variables con una sola sentencia SELECT, imprimiendo 5 y UNIX

Ejemplo: Asignar el valor a una variable con una subconsulta usando SELECT

Sintaxis:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)

Reglas:

  • Encierre la consulta entre paréntesis.
  • La consulta debe ser escalar y devolver una fila y una columna. De lo contrario, se producirá un error.
  • Si la consulta devuelve cero filas, entonces la variable está VACÍA, es decir, es NULA.

Reconsiderar nuestraGurumesa de 99'.

Ejemplo 1: Cuando la subconsulta devuelve una fila como resultado.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1)
PRINT @COURSE_NAME

La subconsulta devuelve una fila, por lo que la variable almacena ese valor, como se muestra a continuación.

Salida de una subconsulta escalar asignada con SELECT, que imprime el nombre del tutorial coincidente.

Ejemplo 2: Cuando la subconsulta devuelve cero filas como resultado.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

Si no hay ninguna fila coincidente, la variable permanece VACÍA, es decir, NULA, como se muestra a continuación.

Salida de una subconsulta escalar SELECT que no devuelve filas, dejando la variable NULL.

Ejemplo 3: Asignar un valor a una variable con una instrucción SELECT estándar.

Sintaxis:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>

Reglas:

  • A diferencia de SET, si la consulta devuelve varias filas, el valor de la variable se establece al valor de la última fila.
  • Si la consulta devuelve cero filas, la variable se establece en VACÍA, es decir, NULA.

Consulta 1: La consulta devuelve una fila.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3
PRINT @COURSE_NAME

La única fila coincidente establece el valor de la variable, como se muestra a continuación.

Salida de una asignación SELECT regular que devuelve una fila.

Consulta 2: La consulta devuelve varias filas.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

Cuando varias filas coinciden, la variable conserva el valor de la última fila, como se muestra a continuación.

Salida de una asignación SELECT regular que devuelve varias filas, keeping el valor de la última fila

Consulta 3: La consulta devuelve cero filas.

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

Cuando no hay filas coincidentes, la variable está VACÍA, es decir, NULA, como se muestra a continuación.

Salida de una asignación SELECT normal que no devuelve filas, dejando la variable NULL.

Otros ejemplos de variables SQL

Una variable declarada también puede utilizarse dentro de una consulta, por ejemplo, en una cláusula WHERE para filtrar filas.

consulta:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

La variable filtra la consulta y devuelve la fila coincidente, como se muestra a continuación.

Salida de usar una variable en una cláusula WHERE para filtrar el GuruTabla 99

¡Datos interesantes sobre las variables de SQL Server!

  • Una variable local puede visualizarse utilizando tanto el comando PRINT como el comando SELECT.
  • El tipo de datos de tabla no permite el uso de 'AS' durante la declaración.
  • SET cumple con los estándares ANSI, mientras que SELECT no.
  • También se permite crear una variable local llamada @. Por ejemplo, se puede declarar de la siguiente manera:
'DECLARE @@ as VARCHAR (10)'

Preguntas Frecuentes

Tras ejecutar DECLARE sin asignar ningún valor, una variable de SQL Server permanece en estado NULL. La variable existe, pero no tiene valor hasta que se le asigna uno mediante DECLARE con =, SET o SELECT. Si se hace referencia a ella antes de la asignación, simplemente devuelve NULL.

Cuando la subconsulta no devuelve filas, SET asigna NULL y sobrescribe cualquier valor actual. SELECT, en cambio, deja la variable sin cambios, mantieneping cualquier valor que ya tuviera. Esta diferencia importa cuando la variable comenzó con un valor distinto de NULL.

Una variable de tabla, declarada como DECLARE @t TABLE(…), almacena un pequeño conjunto de resultados limitado a un solo lote. A diferencia de una tabla temporal (#temp table), solo existe dentro de su lote, no se puede modificar después de su creación y suele ser adecuada para conjuntos de datos pequeños.

Una variable local se limita al lote, procedimiento almacenado o disparador donde se declara, dentro de una misma sesión. La palabra clave GO finaliza un lote, por lo que una variable declarada antes de GO no puede ser referenciada posteriormente.

Una variable puede utilizar casi cualquier SQL Server. tipo de datos, incluyendo int, decimal, varchar, nvarchar, date, datetime, bit y table. Haga coincidir la variable con la columna que representa para evitar errores de conversión implícitos.

Reasigna la variable a sí misma con SET; por ejemplo, SET @counter = @counter + 1. SELECT también funciona: SELECT @total = @total + price. Este patrón permite crear bucles y calcular totales acumulados dentro de scripts y procedimientos almacenados.

Sí. Copiloto de GitHub Puede generar sentencias DECLARE, SET y SELECT a partir de comentarios en lenguaje natural y sugerir tipos de datos adecuados. Siempre revise los nombres, tipos y lógica de asignación generados con respecto a su esquema antes de ejecutarlo en producción.

Asistentes de IA y aprendizaje automático tracSe muestra cómo las variables reciben y pasan valores, se señalan las variables no inicializadas o con tipos incorrectos y se sugieren reescrituras basadas en conjuntos que reemplazan los bucles lentos controlados por variables. El desarrollador aún confirma cada cambio con los datos y la carga de trabajo reales.

Resumir este post con: