Las tablas temporales nos habilitan la posibilidad de recuperar datos de cualquier
punto en el pasado y por cada cambio de datos (Actualizar, Eliminar, Combinar). Con la tabla temporal, los usuarios pueden restaurar datos de cambios accidentales (actualizar/eliminar), así como verificar todos los cambios en los datos, etc. La tabla temporal es una nueva característica de SQL Server disponible desde la versión CTP2 de SQL Server 2016. Una tabla temporal se compone de dos partes (tablas), la primera es la tabla en la que se habilita el seguimiento de datos y se llama una tabla versión original del sistema, esta tabla contiene datos actuales (reales), la segunda parte es la tabla en la que se almacenan los cambios de datos que se realizaron (Actualizar, Eliminar, Combinar) en una tabla con versión del sistema y se llama tabla de historial. 2. ¿Qué es una tabla tipo variable? Las variables de tipo tabla es prácticamente una tabla como las que creas en tu base de datos. Con la diferencia de que esta variable se crea al momento de ejecutar el query y se elimina al terminar la ejecución. Por lo tanto, son tablas que se crean en memoria, aunque en comparación con las tablas temporales, estas están optimizadas. 3. Que diferencia existe entre una tabla temporal y una tabla tipo variable. ● Las tablas temporales son en realidad tablas por lo que se pueden hacer cosas como CREATE INDEXes, etc. Si manipulas grandes cantidades de datos para las que el acceso por índice será más rápido que las tablas temporales, estas son una buena opción. ● Las variables de tabla pueden tener índices mediante el uso de restricciones PRIMARY KEY o UNIQUE. (Si quieres un índice no único basta con incluir la columna de clave primaria (primary key) como la última columna en la restricción única. Si usted no tiene una columna única, puede utilizar una columna de identidad.) SQL 2014 contiene índices no únicos también. ● Las variables de tabla no participan en las transacciones, registro o de bloqueo (logging or locking). Esto significa que son más rápidas, ya que no requieren la sobrecarga, pero por el contrario no te dan esas características. Así, por ejemplo, si desea restaurar (ROLLBACK) a medio camino a través de un procedimiento, ¡entonces las variables de tabla pobladas durante esa transacción seguirán estando pobladas! ● Tablas temporales podrían dar lugar a Stored Procedures recompilados. Las variables de tabla no. ● Puedes crear una tabla temporal utilizando SELECT INTO, que puede ser más rápido para escribir (bueno para un ad-hoc de consulta) y puede permitir lidiar con el cambio de tipos de datos a través del tiempo, ya que no es necesario definir la estructura de su tabla temporal por adelantado. 4. Nombre algunas ventajas y desventajas de cada una. Ventajas de las tablas temporales: ● Las tablas temporales pueden indexarse, pueden tener índices / restricciones ÚNICOS. ● Pueden ser referencias más de una vez en la misma consulta. ● Pueden ser referenciadas (DESDE O UNIRSE) por más de una consulta. Se puede hacer referencia a las tablas derivadas (FROM o JOIN) una vez en una consulta. Desventajas de las tablas temporales: ● Las tablas temporales se crean en el tempdb y al crearlas se producen bloqueos sobre esta base de datos como por ejemplo en las tablas sysobjects y sysindexes. Los bloqueos sobre el la tempdb afectan a todo el servidor. ● Al insertar y consultar se produce operaciones de I/O sobre el disco (Los accesos al disco suelen ser los cuellos de botella del sistema). ● Al borrar la tabla de nuevo hay que adquirir bloqueos sobre la base de datos tempdb y realizar operaciones en disco. ● Si la consulta dentro de un procedimiento almacenado tiene una tabla temporal difícilmente se reutilizará el plan de ejecución. Ventajas de las variables tipo tabla: ● Las variables de tabla se comportan como variables locales, con un alcance bien definido. El alcance es la función, el procedimiento almacenado o el lote que declara la variable. Dentro de su alcance, las variables de tabla se pueden usar como tablas normales. Esta variable se puede usar en las instrucciones SELECT, INSERT, UPDATE y DELETE donde se usa una tabla o expresión de tabla. ● El uso de variables de tabla en procedimientos almacenados reduce la cantidad de compilación de procedimientos almacenados en comparación con el uso de tablas temporales. Desventajas de las variables tipo tabla: ● Una vez que haya declarado una variable de tabla, no puede agregar, cambiar el nombre o eliminar columnas, ni puede crearlas sobre la marcha usando el comando SELECT INTO ● No puede hacer referencia a una variable de tabla desde fuera de su alcance.