Published on

July 7, 2011

Usando tablas temporales, variables de tabla y CTEs en SQL Server

Las consultas grandes y complejas que involucran múltiples uniones, uniones y subconsultas anidadas pueden volverse rápidamente incomprensibles y difíciles de validar, revisar o solucionar problemas. Sin embargo, existen formas de simplificar estas consultas y hacerlas más manejables. Un enfoque es utilizar tablas temporales, variables de tabla y expresiones de tabla comunes (CTEs) como vistas ad hoc que se pueden crear según sea necesario.

En este artículo, exploraremos cómo utilizar tablas temporales, variables de tabla y CTEs en SQL Server para simplificar consultas complejas y mejorar el rendimiento de las consultas.

Tablas temporales

Las tablas temporales son tablas que se crean y utilizan dentro de una sesión o conexión específica. Están disponibles siempre que la conexión de la base de datos con la que se ejecutaron siga abierta. Las tablas temporales se pueden declarar con un alcance local o global.

Las tablas temporales locales se declaran con un solo prefijo “#” y solo están disponibles dentro de la sesión actual. Las tablas temporales globales se declaran con un prefijo “##” y también están disponibles para otras sesiones.

Aquí hay un ejemplo de creación y población de una tabla temporal:

CREATE TABLE #TablaTemporal 
(
 RetailerId INT,
 BusinessName VARCHAR(50),
 Location VARCHAR(50),
 Sales MONEY
)

INSERT INTO #TablaTemporal (RetailerId, BusinessName, Location, Sales)
SELECT a.RetailerId, a.BusinessName, b.Location, c.Sales
FROM RetailerIdentification a
INNER JOIN RetailerLocation b ON a.RetailerId = b.RetailerId
INNER JOIN RetailerSales c ON a.RetailerId = c.RetailerId

Variables de tabla

Las variables de tabla son similares a las tablas temporales, pero solo están disponibles dentro del ámbito del script o lote en el que se declaran. Se almacenan en memoria (si hay suficiente memoria disponible) y pueden mejorar el rendimiento de las consultas.

Aquí hay un ejemplo de creación y población de una variable de tabla:

DECLARE @VariableTabla TABLE
( 
 RetailerId INT,
 BusinessName VARCHAR(50),
 Location VARCHAR(50),
 Sales MONEY
)

INSERT INTO @VariableTabla (RetailerId, BusinessName, Location, Sales)
SELECT a.RetailerId, a.BusinessName, b.Location, c.Sales
FROM RetailerIdentification a
INNER JOIN RetailerLocation b ON a.RetailerId = b.RetailerId
INNER JOIN RetailerSales c ON a.RetailerId = c.RetailerId

Expresiones de tabla comunes (CTEs)

Las CTEs son conjuntos de resultados temporales que se definen dentro del ámbito de ejecución de una sola instrucción SELECT, INSERT, UPDATE, DELETE o CREATE VIEW. Son útiles para simplificar consultas complejas y mejorar la legibilidad de las consultas.

Aquí hay un ejemplo de creación y uso de una CTE:

WITH CTE (RetailerId, BusinessName, Location, Sales)
AS 
(
 SELECT a.RetailerId, a.BusinessName, b.Location, c.Sales
 FROM RetailerIdentification a
 INNER JOIN RetailerLocation b ON a.RetailerId = b.RetailerId
 INNER JOIN RetailerSales c ON a.RetailerId = c.RetailerId
)
SELECT RetailerId, BusinessName, Location, Sales
FROM CTE

Uniendo objetos de tabla

Una vez que hemos creado tablas temporales, variables de tabla o CTEs, podemos unirlas con otras tablas para realizar consultas más complejas. Esto puede ser especialmente útil cuando se trabaja con conjuntos de datos grandes y complejos.

Aquí hay un ejemplo de unir una tabla temporal con otra tabla:

SELECT a.RetailerId, a.BusinessName, a.Location, a.Sales, b.BusinessFounder
FROM #TablaTemporal a
INNER JOIN BusinessInfo b ON a.BusinessName = b.BusinessName

De manera similar, puede unir variables de tabla o CTEs con otras tablas utilizando la misma sintaxis.

Conclusión

El uso de tablas temporales, variables de tabla y CTEs puede simplificar en gran medida consultas complejas y mejorar el rendimiento de las consultas. Estas vistas ad hoc le permiten descomponer consultas grandes en partes más pequeñas y manejables, lo que facilita la validación, revisión y solución de problemas de su código.

Al comprender las diferencias entre tablas temporales, variables de tabla y CTEs, y saber cuándo usar cada una, puede optimizar sus consultas de SQL Server y mejorar el rendimiento general de la base de datos.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.