Declaración y asignación de variables y sinónimos

Completado

En T-SQL, al igual que con otros lenguajes de programación, las variables son objetos que permiten el almacenamiento temporal de un valor para su uso posterior. Ya ha visto variables cuando las ha usado para pasar valores de parámetro a procedimientos almacenados y funciones.

En T-SQL, las variables deben declararse para poder usarlas. Se les puede asignar un valor o inicializarse cuando se declaran. Declarar una variable incluye proporcionar un nombre y un tipo de datos, como se muestra a continuación. Para declarar una variable, debe usar la instrucción DECLARE.

--Declare and initialize the variables.
DECLARE @numrows INT = 3, @catid INT = 2;
--Use variables to pass the parameters to the procedure.
EXEC Production.ProdsByCategory @numrows = @numrows, @catid = @catid;
GO

Las variables deben declararse en el mismo lote en el que se hace referencia a ellas. En otras palabras, todas las variables de T-SQL son locales en el ámbito del lote, tanto en visibilidad como en duración. Solo otras instrucciones del mismo lote pueden ver una variable declarada en el lote. Una variable se destruye automáticamente cuando finaliza el lote.

Trabajo con variables

Una vez que haya declarado una variable, debe inicializarla o asignarle un valor. Puede hacerlo de tres maneras:

  • En SQL Server 2008 o posterior, puede inicializar una variable mediante la instrucción DECLARE.
  • En cualquier versión de SQL Server, puede asignar un valor único (escalar) mediante la instrucción SET.
  • En cualquier versión de SQL Server, puede asignar un valor a una variable mediante una instrucción SELECT. Asegúrese de que la instrucción SELECT devuelve exactamente una fila. Un resultado vacío dejará la variable con su valor original; más de un resultado devolverá el último resultado.

En el ejemplo siguiente se muestran las tres formas de declarar y asignar valores a variables:

DECLARE @var1 AS INT = 99;
DECLARE @var2 AS NVARCHAR(255);
SET @var2 = N'string';
DECLARE @var3 AS NVARCHAR(20);
SELECT @var3 = lastname FROM HR.Employees WHERE empid=1;
SELECT @var1 AS var1, @var2 AS var2, @var3 AS var3;
GO

Esto genera los siguientes resultados.

var1 var2 var3
99 cuerda / cadena Davis

Sugerencia

Para obtener instrucciones completas sobre las variables locales, consulte la documentación de referencia de T-SQL.

Trabajo con sinónimos

En SQL Server, los sinónimos proporcionan un método para crear un vínculo o alias a un objeto almacenado en la misma base de datos o incluso en otra instancia de SQL Server. Los objetos que podrían tener sinónimos definidos para ellos incluyen tablas, vistas, procedimientos almacenados y funciones definidas por el usuario.

Los sinónimos se pueden usar para hacer que un objeto remoto aparezca localmente o para proporcionar un nombre alternativo para un objeto local. Por ejemplo, los sinónimos se pueden usar para proporcionar una capa de abstracción entre el código de cliente y los objetos de base de datos reales utilizados por el código. El código hace referencia a objetos por sus alias, independientemente del nombre real del objeto.

Nota:

Puede crear un sinónimo que apunte a un objeto que aún no existe. Esto se denomina resolución de nombres diferida. El motor de SQL Server no comprobará la existencia del objeto real hasta que el sinónimo se use en tiempo de ejecución.

Para administrar sinónimos, use los comandos del lenguaje de definición de datos (DDL) CREATE SYNONYM, ALTER SYNONYM y DROP SYNONYM, como en el ejemplo siguiente:

CREATE SYNONYM dbo.ProdsByCategory FOR TSQL.Production.ProdsByCategory;
GO
EXEC dbo.ProdsByCategory @numrows = 3, @catid = 2;

Para crear un sinónimo, debe tener el permiso "CREATE SYNONYM", así como el permiso para modificar el esquema en el que se almacenará el sinónimo.

Nota:

Para crear un sinónimo, el usuario debe tener el permiso CREATE SYNONYM y ser propietario del esquema o tener el permiso ALTER SCHEMA en el esquema de destino.

Un sinónimo es un objeto "vacío" que se resuelve en el objeto de origen cuando se hace referencia a él en tiempo de ejecución.