sql >> Base de Datos >  >> RDS >> Sqlserver

Introducción a las tablas temporales en SQL Server

En SQL Server, una tabla temporal es un cierto tipo de tabla que existe hasta que queda fuera del alcance (a menos que se elimine explícitamente).

Esto es diferente a una tabla regular (persistente), donde la tabla regular existe permanentemente en su base de datos hasta que la descarte explícitamente.

Ventajas de las tablas temporales

Las tablas temporales pueden ser útiles en momentos en que necesita ejecutar varias consultas en un subconjunto de un conjunto de resultados más grande. Puede usar SELECT... INTO con un WHERE cláusula para colocar el subconjunto de datos en una tabla temporal. A continuación, puede ejecutar consultas en esa tabla temporal. Esto le evita tener que filtrar constantemente los datos del conjunto de resultados más grande al realizar varias consultas.

Las tablas temporales también pueden ser útiles desde la perspectiva de los permisos. Si necesita trabajar con datos de una tabla persistente pero no tiene permisos suficientes para realizar todas las operaciones que necesita, puede copiar esos datos en una tabla temporal (suponiendo que tenga acceso de lectura) y hacer lo que necesite hacer .

Las tablas temporales también se pueden usar si no tiene permiso para crear una tabla (persistente) en la base de datos actual.

Otro aspecto útil de las tablas temporales es que puede usarlas para ejecutar consultas ad-hoc rápidas al ejecutar una prueba, demostrar un concepto, etc., sin preocuparse por dejar un rastro de tablas persistentes que olvidó descartar.

TempDB

Las tablas temporales se crean en TempDB base de datos. Esta es una base de datos del sistema que almacena objetos de usuario temporales, como tablas e índices temporales, procedimientos almacenados temporales, variables de tabla, tablas devueltas en funciones con valores de tabla y cursores. También almacena objetos internos creados por el motor de la base de datos y tiendas de versión.

Cualquier usuario puede crear tablas temporales en TempDB . No necesita configurar ningún permiso especial para TempDB acceso.

Sintaxis

Las tablas temporales se crean utilizando la misma sintaxis que las tablas normales. La diferencia es que las tablas temporales tienen como prefijo uno o dos signos numéricos (# ):

  • Las tablas temporales locales tienen el prefijo de un solo signo de número (p. ej., #table_name )
  • Las tablas temporales globales tienen el prefijo de un signo de número doble (p. ej., ##table_name )

Ejemplo de creación de un local tabla temporal:

CREATE TABLE #LocalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Ejemplo de creación de un global tabla temporal:

CREATE TABLE ##GlobalTableName (
    col1 int PRIMARY KEY,
    col2 varchar(255)
);

Las tablas temporales locales son visibles solo en la sesión actual y las tablas temporales globales son visibles para todas las sesiones.

¿Cuánto dura una tabla temporal?

Las tablas temporales se descartan automáticamente cuando quedan fuera del alcance.

También puede eliminar explícitamente una tabla temporal usando DROP TABLE .

Exactamente cuando una tabla temporal se elimina automáticamente depende de si la tabla temporal es local o global, y si se crea o no en un procedimiento almacenado.

  • Locales :una tabla temporal local creada en un procedimiento almacenado se elimina automáticamente cuando finaliza el procedimiento almacenado. Cualquier procedimiento almacenado anidado ejecutado por el procedimiento almacenado que creó la tabla puede hacer referencia a la tabla. El proceso que llamó al procedimiento almacenado que creó la tabla no puede hacer referencia a la tabla.

    Todas las demás tablas temporales locales se eliminan automáticamente al final de la sesión actual.

  • Global :las tablas temporales globales se eliminan automáticamente cuando finaliza la sesión que creó la tabla y todas las demás tareas han dejado 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 T-SQL. Esto significa que una tabla temporal global se elimina al finalizar la última instrucción T-SQL que hacía referencia activa a la tabla cuando finalizó la sesión de creación.

Esquema

Todas las tablas temporales se crean en el dbo esquema. Si especifica explícitamente un esquema diferente, se ignora.

Claves foráneas

Las restricciones FOREIGN KEY no se aplican a las tablas temporales. Si especifica una clave externa, la tabla aún se crea, solo que sin una clave externa. Se le devolverá un mensaje avisándole de esto.