Tablas Temporales SQL Server

Las tablas temporales son utilizadas para mantener copia de uno o varios resultados de consultas, y  a estos datos se puede cambiar el valor en la tabla temporal, y no afecta en lo absoluto la tabla o tablas real de donde se obtuvieron los datos.

Todas tablas temporales se almacenan en la base de datos tempdb en las bases de datos del sistema.

Tipos de Tablas Temporales

(#) Tabla Temporal Local: Se utiliza con un # (hash) para indicar que la tabla temporal será utilizada localmente (Solo será accedida a través de la conexión con cual fue creada). Esta tabla es destruida automáticamente en cuanto se cierre la conexión de SQL Server al menos que no se haya eliminado la tabla manualmente mediante el Query.


(##) Tabla Temporal Global: Se utiliza con doble ## (hash) para indicar que la tabla temporal será utilizada globalmente. Esta tabla puede utilizarla cualquier conexión de SQL Server y estas conexiones pueden modificar, borrar o eliminar la tabla temporal y sus registros. Al igual que las tablas temporales locales, esta se destruye cuando la última sesión utilizada por esta, cierre sesión.


(@) Tabla Temporal Variable: Se utiliza con arroba (@) para indicar que se utiliza como variable, esta nueva variable se implementó en la versión 2000 de SQL Server, al crear la tabla temporal como variable, se debe construir la estructura de la tabla en el Query. El debate desde esta implementación siempre fue y será, cuando utilizar una tabla temporal o tabla variable. Una de las recomendaciones para saber cuál utilizar es sí en tu procedimiento se necesita indexar la table (KEY o UNIQUE), lo mejor es utilizar tablas de variables (@).


Ejemplos Prácticos:


Declaración de la variable tabla:



DECLARE @Datos TABLE

(
Id INT IDENTITY,
Nombre Nvarchar(80)
)

Insertar datos a la tabla temporal.

INSERT INTO @Datos VALUES ('Ariel')
INSERT INTO @Datos VALUES ('Braulio')
INSERT INTO @Datos VALUES ('Cassandra')
INSERT INTO @Datos VALUES ('Damian')
INSERT INTO @Datos VALUES ('Erick')
INSERT INTO @Datos VALUES ('Fabiola')
INSERT INTO @Datos VALUES (NULL)
INSERT INTO @Datos VALUES (NULL)


Al ejecutar hasta este paso, SQL solo muestra las filas (rows) fueron afectados.

Para ver los resultados es necesario hacer el SELECT de la tabla temporal y mostrara los datos de la tabla.

SELECT * FROM @Datos


Ahora basados en la tabla temporal del ejemplo de arriba, vamos a copiar los datos a una tabla temporal local (#).

SELECT *
INTO #temporal
FROM @Datos

SELECT * FROM #temporal


Si seguimos ejecutando el SELECT de la table temporal local, los resultados se seguirán mostrando, porque la tabla temporal local no se ha eliminado y no se ha cerrado la sesión de SQL, esto quiere decir que, si ejecutamos el SELECT de la tabla temporal, los datos estarán en la tabla.

Para borrar la tabla temporal local o global se debe ejecutar al iniciar o al finalizar el Query con la siguiente instrucción.

DROP TABLE #temporal

Ejecutada esta acción, sí se trata de correr el SELECT de la tabla temporal local, el mensaje de error aparece indicando que la tabla no existe.



En la tabla temporal como variable hacemos una modificación a la estructura de las columnas, indicando que la columna nombre no acepte nulos (NOT NULL).

DECLARE @Datos TABLE
(
Id INT IDENTITY,
Nombre Nvarchar(80) NOT NULL
)

Si en la tabla se intenta agregar datos nulos, el Query regresa una excepción el cual indica que no se puede agregar datos nulos en la columna nombre.


Nota: En este ejemplo tome los datos de una tabla temporal para ingresarlos en otra tabla temporal, pero esto funciona tomando los datos de cualquier tabla, vista, procedimiento almacenado, etc.

Sigue este Blog desde Telegram: Clic aquí para unirte al canal

Compartir
Compartir

Comments

Week's Hit

Jobs SQL Server P1

Trigger SQL Server

Funciones SQL Server