sql-server - stored - tablas temporales sql server
Tablas temporales locales y globales en SQL Server (4)
¿Cuál es la diferencia entre tablas temporales locales y globales en SQL Server?
Citando de libros en línea:
Las tablas temporales locales son visibles solo en la sesión actual; las tablas temporales globales son visibles para todas las sesiones.
Las tablas temporales se eliminan automáticamente cuando salen del alcance, a menos que se eliminen de manera explícita con DROP TABLE:
- Una tabla temporal local creada en un procedimiento almacenado se elimina automáticamente cuando finaliza el procedimiento almacenado. La tabla puede ser referenciada por cualquier procedimiento almacenado anidado ejecutado por el procedimiento almacenado que creó la tabla. La tabla no puede ser referenciada por el proceso que llamó al procedimiento almacenado que creó la tabla.
- Todas las demás tablas temporales locales se eliminan automáticamente al final de la sesión actual.
- Las tablas temporales globales se eliminan automáticamente cuando finaliza la sesión que creó la tabla y todas las demás tareas dejan de hacer referencia a ellas. La asociación entre una tarea y una tabla se mantiene solo durante la vida de una sola instrucción Transact-SQL. Esto significa que una tabla temporal global se descarta al completar la última instrucción de Transact-SQL que hacía referencia activa a la tabla cuando finalizaba la sesión de creación.
Encuentro esta explicación bastante clara (es una copia pura de Technet ):
Hay dos tipos de tablas temporales: locales y globales. Las tablas temporales locales solo son visibles para sus creadores durante la misma conexión a una instancia de SQL Server que cuando las tablas fueron creadas o referenciadas por primera vez. Las tablas temporales locales se eliminan después de que el usuario se desconecta de la instancia de SQL Server. Las tablas temporales globales son visibles para cualquier usuario y cualquier conexión después de su creación, y se eliminan cuando todos los usuarios que hacen referencia a la tabla se desconectan de la instancia de SQL Server.
1.) Una tabla temporal local existe solo por la duración de una conexión o, si está definida dentro de una declaración compuesta, por la duración de la declaración compuesta.
Las tablas temporales locales solo están disponibles para la sesión o conexión de SQL Server (significa usuario único) que creó las tablas. Estos se eliminan automáticamente cuando se cierra la sesión que creó las tablas. El nombre de la tabla temporal local se mira con un solo signo hash ("#").
CREATE TABLE #LocalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, ''Name'',''Address'');
GO
Select * from #LocalTemp
El alcance de la tabla temporal local existe para la sesión actual del usuario actual significa para la ventana de consulta actual. Si cierra la ventana de consulta actual o abre una nueva ventana de consulta e intentará encontrar la tabla temporal creada anteriormente, le dará el error.
2.) Una tabla temporal global permanece en la base de datos permanentemente, pero las filas existen solo dentro de una conexión determinada. Cuando la conexión se cierra, los datos en la tabla temporal global desaparecen. Sin embargo, la definición de la tabla permanece con la base de datos para acceder cuando se abre la base de datos la próxima vez.
Las tablas temporales globales están disponibles para todas las sesiones o conexiones de SQL Server (significa todo el usuario). Estos pueden ser creados por cualquier usuario de conexión de SQL Server y estos se eliminan automáticamente cuando se han cerrado todas las conexiones de SQL Server. El nombre global de la tabla temporal se mira con doble signo hash ("##").
CREATE TABLE ##GlobalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, ''Name'',''Address'');
GO
Select * from ##GlobalTemp
Las tablas temporales globales son visibles para todas las conexiones de SQL Server, mientras que las tablas temporales locales solo son visibles para la conexión actual de SQL Server.
Las variables de tabla (
DECLARE @t TABLE
) solo son visibles para la conexión que las crea y se eliminan cuando finaliza el lote o el procedimiento almacenado.Las tablas temporales locales (
CREATE TABLE #t
) solo son visibles para la conexión que las crea, y se eliminan cuando se cierra la conexión.Las tablas temporales globales (
CREATE TABLE ##t
) son visibles para todos, y se eliminan cuando se cierran todas las conexiones que las han referenciado.Las tablas permanentes de Tempdb (
USE tempdb CREATE TABLE t
) son visibles para todos y se eliminan cuando se reinicia el servidor.