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
Sigue este Blog desde Telegram: Clic aquí para unirte al canal
Comments
Post a Comment