Saltar al contenido

Tablas temporales en SQL Server

Las tablas temporales en SQL Server, son las estructuras de datos mas utilizadas y que debes tener encuenta en tus procesos mas complejos. actualemente podemos manejar 3 tipos de tablas temporales que deberias conocer.

En este articulo aprenderas la sintaxis de estas tablas, que son y las recomendaciones mas aceptables de su uso. Aquí está encontraras un ejemplo práctico que te ayudará a entender cómo crear índices en una tabla temporal en SQL Server.

Índice

    Que son las tablas temporales de sql server?

    Las tablas temporales en SQL Server son una estructura de datos que permite almacenar información temporalmente dentro de una sesión de base de datos. Estas tablas son útiles para almacenar y procesar información temporal en un proceso de consulta o procedimiento almacenado.

    Recomendaciones para el uso de tabla temporales

    Aquí hay algunas recomendaciones para el uso de tablas temporales y variables en SQL Server:

    1. Optimice la consulta: Antes de crear una tabla temporal, asegúrese de optimizar la consulta para obtener los resultados más rápidos posibles.
    2. Evite hacer demasiado grandes las tablas temporales: Las tablas temporales muy grandes pueden afectar negativamente el rendimiento del sistema. Trate de limitar el tamaño de las tablas temporales al mínimo necesario para sus requisitos.
    3. Use las variables con precaución: Las variables también pueden afectar negativamente el rendimiento si se utilizan en grandes cantidades o en bucles repetitivos. Trate de limitar su uso a situaciones donde sea necesario.
    4. Indice las tablas temporales: Si es posible, agregue índices a las tablas temporales para mejorar la velocidad de las consultas.

    Tipos de tablas temporales

    Tablas de session : estas tablas funcionan dentro de la session de usuario y se alojan en la base de datos tempdb y se destruyen de forma automatica al final de la session de usuario estas tablas es recomendable siempre eliminarlas con un drop table. Por lo general estas se crean con un signo de numero (# ) delante del nombre.

    Sintaxis session

    Las tablas temporales se pueden crear mediante el uso de la palabra clave «CREATE TABLE» con la opción «#» antes del nombre de la tabla.

    CREATE TABLE #tempTable (
       column1 INT,
       column2 VARCHAR(50)
    );

    Tablas de transaccion : son una estructura de datos que permite almacenar información temporalmente declaradas como variables. por lo general seria:

    Sintaxis transaccionales

    Las tablas temporales se pueden crear mediante el uso de la palabra clave «DECLARE TABLE» con la opción «@» antes del nombre de la tabla. Por ejemplo:

    Declare @tempTableTABLE(
       column1 INT,
       column2 VARCHAR(50)
    );

    Tablas temporales globales : Funcionan dentro dentro de la instancia del servidor cualquier usuario podra acceder a esta tabla temporal, la misma se aloja en el tempdb y suele usarse para procesos muy complejos o en ambiente de desarrollo. Para liberar estas tabla se requiere el uso de comando drop table.

    Sintaxis tablas temporales Globales

    Las tablas temporales se pueden crear mediante el uso de la palabra clave «CREATE TABLE» con la opción «##» antes del nombre de la tabla.

     CREATE TABLE ##tempTable (
       column1 INT,
       column2 VARCHAR(50)
    );

    Crear tablas con Select into

    La sentencia SELECT INTO en SQL Server permite crear una nueva tabla y copiar los resultados de una consulta en ella. Si se utiliza en una tabla temporal, la tabla resultante se creará y se destruirá dentro de la sesión actual. Esta es una forma rápida y fácil de crear una tabla temporal y almacenar datos en ella.

    La sintaxis para crear una tabla temporal con SELECT INTO es la siguiente:

    SELECT column1, column2, column3
    INTO #tempTable
    FROM sourceTable
    WHERE condition;

    En este ejemplo, se está creando una tabla temporal llamada #tempTable y copiando los resultados de la tabla sourceTable donde se cumpla una determinada condición.

    Es importante tener en cuenta que la tabla temporal solo estará disponible dentro de la sesión actual y se destruirá al finalizar la sesión o cuando se cierre la conexión a la base de datos.

    Como crear indices para tablas temporales ?

    Puedes crear índices en una tabla temporal de la misma manera que en una tabla regular. Aquí hay un ejemplo de cómo crear un índice en una tabla temporal #employeeTempTable en SQL Server:

    CREATE NONCLUSTERED INDEX idx_age
    ON #employeeTempTable (age);
    
    

    En este ejemplo, se está creando un índice no agrupado llamado idx_age en la columna age de la tabla temporal #employeeTempTable. Este índice ayudará a mejorar el rendimiento de las consultas que filtren o ordenen los datos por la columna age.

    También es importante tener en cuenta que, una vez que se ha eliminado la tabla temporal, también se eliminarán los índices asociados a ella. Por lo tanto, si necesitas crear índices en una tabla temporal, es importante hacerlo cada vez que se cree la tabla temporal.

    Cual usar declare table o temp table ?

    Las tablas temporales en SQL Server se pueden crear de dos formas: utilizando la sintaxis DECLARE @table o #table. Ambas opciones tienen sus ventajas y desventajas, pero en general se recomienda usar #table en lugar de DECLARE @table.

    Ventajas de #table:

    • Están disponibles para todas las sesiones y para todos los usuarios que accedan a la base de datos.
    • Se comportan de manera similar a las tablas regulares, lo que las hace más fáciles de utilizar.
    • Se mantienen hasta que la sesión actual se cierra o hasta que se ejecuta una sentencia DROP TABLE.

    Desventajas de #table:

    • No se pueden acceder a ellas desde procedimientos almacenados o desde otros servidores.
    • No son transaccionales, lo que significa que si se produce un error durante una transacción, los datos en la tabla temporal se perderán.

    Ventajas de DECLARE @table:

    • Son visibles solo en la sesión actual y para el usuario actual.
    • Son transaccionales, lo que significa que los datos en la tabla temporal se mantendrán si se produce un error durante una transacción.

    Desventajas de DECLARE @table:

    • No se comportan de manera similar a las tablas regulares.
    • Son visibles solo en la sesión actual y para el usuario actual, lo que las hace menos útiles para aplicaciones multiusuario.

    Ejemplo practico de como usar las tablas temporales

    Para trabajar con este ejemplo te recomiendo tener el management studio instalado esta es la herramienta por defecto de los dba de SQL server. Luego de instalado te insto a ver cómo funcionaría una tabla temporal en SQL Server con este ejemplo :

    1. Primero, se crea una tabla temporal con SELECT INTO:
    SELECT name, age, salary
    INTO #employeeTempTable
    FROM employeeTable
    WHERE department = 'IT';
    

    En este ejemplo, se está creando una tabla temporal llamada #employeeTempTable y copiando los datos de la tabla employeeTable donde el departamento sea ‘IT’.

    1. Luego, se pueden realizar consultas en la tabla temporal:
     SELECT name, age, salary
    FROM #employeeTempTable
    WHERE age >= 30;
    

    En este ejemplo, se están mostrando los nombres, las edades y los salarios de los empleados en la tabla temporal donde la edad sea mayor o igual a 30 años.

    1. Finalmente, se puede eliminar la tabla temporal con DROP:
    DROP TABLE #employeeTempTable;
    

    En este ejemplo, se está eliminando la tabla temporal #employeeTempTable, liberando la memoria utilizada por ella.

    En conclusion

    Recomiendo usar #table en lugar de DECLARE @table para la mayoría de las aplicaciones, ya que es más fácil de usar y más versátil. Sin embargo, si se requiere un comportamiento transaccional para la tabla temporal, entonces DECLARE @table es la mejor opción.

    Hasta la proxima :D!!

    Gracias