Objetos temporales en SQL Server

El motor de base de datos de Microsoft nos proporciona una serie de objetos temporales. Para ello, SQL Server utiliza la base de datos de sistema llamada tempdb. Esta base de datos se encuentra en la carpeta System Databases del SQL Server Management Studio (SSMS). Desde ahí podemos ver todos los objetos temporales creados.

En concreto la base de datos tempdb contiene los siguientes objetos:

  • Tablas temporales locales y globales.
  • Stored procedures o procedimientos almacenados temporales.
  • Variables de tabla.
  • Cursores.
  • Tablas de trabajo.
  • Versiones de filas.

Por lo tanto hay que tener en cuenta que tempdb puede crecer mucho. Hay que valorar si merece la pena utilizar tablas físicas para mejorar el rendimiento. Así como la legibilidad del código, que puede complicarse al usar objetos temporales. No hay que olvidar que no suelen estar en memoria, sino que hay que acceder al disco y puede ser un cuello de botella.

Tipos de tablas temporales en SQL Server

Vamos a ver los tres tipos de tablas temporales que nos proporciona esta base de datos y la forma de referenciar a cada uno de ellos.

Tablas temporales locales (#)

Este tipo de tablas sólo son accesibles dentro de la misma sesión de la conexión a la instancia a la base de datos. Es decir, se crea durante una sesión, pero en cuanto el usuario se desconecta o pierde la conexión, dejan de ser accesibles. Sin embargo, se puede hacer un DROP TABLE en el momento que ya no se vaya a usar. En caso de que no se haga, se borrará automáticamente al cerrar la sesión.

Las tablas temporales locales, más allá de existir sólo mientras exista la sesión, en la práctica tienen el mismo comportamiento que cualquier tabla física. Se puede crear, eliminar, vaciar, rellenar, etc. Tanto con instrucciones DML (insert, update, delete) como con otras como INTO. Incluso se pueden crear índices. Se distinguen porque empiezan porque siguen esta forma: #nombre.

Tablas temporales globales (##)

Las tablas temporales globales son muy parecidas a las locales. La forma de funcionar y las operaciones que admiten son las mismas. La diferencia es el ámbito. Cuando se crea una, ésta es visible por cualquier usuario conectado. Y se borra automáticamente, cuando todos los usuarios que la referencian han cerrado la sesión. Así que habrá que tener cuidado. Tanto al modificar los datos como al crearla/borrarla, ya que puede provocar errores en las demás sesiones si no está bien controlado.

Su nomenclatura es la siguiente: ##nombre.

Variables de tabla (@)

Por último encontramos las variables de tabla. No admite instrucciones DDL (como índices o modificaciones de la estructura). Se comportan como cualquier variable local, almacenándose en memoria. Aunque pueden estar en tempdb si no hubiera espacio en memoria. Al ser variables, pueden pasarse como parámetros entre procedimientos almacenados.

Se nombran como @nombre.

Deja un comentario

Pin It on Pinterest