¿Cuál es la diferencia entre las tablas temporales locales y globales en SQL Server?
sql-server
temp-tables
global-temp-tables
Andrew Sullivan
fuente
fuente
Respuestas:
Encuentro esta explicación bastante clara (es pura copia de Technet ):
fuente
Las variables de tabla (
DECLARE @t TABLE
) son visibles solo para la conexión que lo crea y se eliminan cuando finaliza el procedimiento por lotes o almacenado.Las tablas temporales locales (
CREATE TABLE #t
) son visibles solo para la conexión que la 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 a las que se hace referencia.Las tablas permanentes de Tempdb (
USE tempdb CREATE TABLE t
) son visibles para todos y se eliminan cuando se reinicia el servidor.fuente
1.) Una tabla temporal local existe solo para la duración de una conexión o, si se define dentro de una declaración compuesta, para la duración de la declaración compuesta.
2.) Una tabla temporal global permanece en la base de datos de forma permanente, pero las filas solo existen dentro de una conexión determinada. Cuando se cierra la conexión, 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 la base de datos se abra la próxima vez.
fuente
Citando libros en línea:
Las tablas temporales locales solo son visibles 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 explícitamente usando DROP TABLE:
fuente
Tablas temporales locales : si crea tablas temporales locales y luego abre otra conexión e intenta la consulta, obtendrá el siguiente error.
solo se puede acceder a las tablas temporales dentro de la sesión que las creó.
Tablas temporales globales : a veces, es posible que desee crear una tabla temporal que sea accesible para otras conexiones. En este caso, puede usar tablas temporales globales.
Las tablas temporales globales solo se destruyen cuando se cierran todas las sesiones que se refieren a ella.
fuente
Vale la pena mencionar que también hay: tablas temporales globales con ámbito de base de datos (actualmente solo es compatible con Azure SQL Database).
fuente
No vi ninguna respuesta que muestre a los usuarios dónde podemos encontrar una tabla Global Temp. Puede ver las tablas temporales locales y globales en la misma ubicación al navegar dentro de SSMS. Captura de pantalla a continuación tomada de este enlace .
Bases de datos -> Bases de datos del sistema -> tempdb -> Tablas temporales
fuente