Published on

July 11, 2019

Comprendiendo las tablas temporales en SQL Server

Las tablas temporales son una característica útil en SQL Server que te permite almacenar y manipular datos temporalmente dentro de una sesión. Son particularmente útiles cuando necesitas realizar operaciones complejas o almacenar resultados intermedios durante la ejecución de una consulta o procedimiento almacenado.

Sin embargo, hay algunos matices que debes tener en cuenta al trabajar con tablas temporales, especialmente cuando se trata de usarlas dentro de declaraciones SQL dinámicas.

Tablas temporales dentro de SQL dinámico

Cuando creas una tabla temporal dentro de una declaración SQL dinámica, puedes acceder y manipular la tabla dentro de esa misma declaración sin problemas. Por ejemplo:

DECLARE @SQLStatement NVARCHAR(1000);
SET @SQLStatement = 'CREATE TABLE #TempTable (ID INT);
SELECT ID FROM #TempTable;';
EXEC sp_executesql @SQLStatement;

En el ejemplo anterior, se crea la tabla temporal #TempTable y se accede a ella dentro de la declaración SQL dinámica, y todo funciona como se espera.

Tablas temporales fuera de SQL dinámico

Sin embargo, si intentas acceder a una tabla temporal fuera de la declaración SQL dinámica, te encontrarás con un error. Por ejemplo:

DECLARE @SQLStatement NVARCHAR(1000);
SET @SQLStatement = 'CREATE TABLE #TempTable (ID INT);';
EXEC sp_executesql @SQLStatement;
SELECT ID FROM #TempTable;

Ejecutar el código anterior resultará en el siguiente error: Nombre de objeto no válido ‘#TempTable’.

Este error ocurre porque la tabla temporal solo es accesible dentro del ámbito de la declaración SQL dinámica. Una vez que se ejecuta la declaración, la tabla temporal se elimina automáticamente y no puedes hacer referencia a ella fuera de la declaración.

Tablas temporales globales fuera de SQL dinámico

Si tienes la necesidad de acceder a una tabla temporal fuera de la declaración SQL dinámica, puedes usar tablas temporales globales. Las tablas temporales globales se preceden de dos signos de almohadilla (##) y persisten más allá del ámbito de la sesión.

Aquí tienes un ejemplo:

DECLARE @SQLStatement NVARCHAR(1000);
SET @SQLStatement = 'CREATE TABLE ##GlobalTempTable (ID INT);';
EXEC sp_executesql @SQLStatement;
SELECT ID FROM ##GlobalTempTable;

En este caso, la tabla temporal global ##GlobalTempTable se crea dentro de la declaración SQL dinámica, pero se puede acceder y manipular fuera del ámbito de la declaración sin problemas.

Las tablas temporales globales son útiles cuando necesitas compartir datos entre diferentes sesiones o cuando deseas persistir datos más allá de la duración de una sola sesión.

Recuerda usar las tablas temporales globales con prudencia, ya que pueden consumir recursos del sistema y pueden causar conflictos en entornos multiusuario.

Si tienes algún otro script o consejo interesante relacionado con SQL Server, no dudes en enviármelo por correo electrónico o dejar un comentario a continuación. Estaré encantado de publicarlos en el blog dándote el crédito correspondiente.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.