Saltar al contenido

Diferencia entre CTE, tabla temporal y variable de tabla en MSSQL

Solución:

CTE – Expresiones de tabla comunes
CTE significa expresiones de tabla común. Se introdujo con SQL Server 2005. Es un conjunto de resultados temporal y, por lo general, puede ser el resultado de una subconsulta compleja. A diferencia de la tabla temporal, su vida se limita a la consulta actual. Se define mediante la instrucción WITH. CTE mejora la legibilidad y facilita el mantenimiento de consultas y subconsultas complejas. Siempre comience CTE con punto y coma.

With CTE1(Address, Name, Age)--Column names for CTE, which are optional
AS
(
SELECT Addr.Address, Emp.Name, Emp.Age from Address Addr
INNER JOIN EMP Emp ON Emp.EID = Addr.EID
)
SELECT * FROM CTE1 --Using CTE 
WHERE CTE1.Age > 50
ORDER BY CTE1.NAME

¿Cuándo usar CTE? Se utiliza para almacenar el resultado de una subconsulta compleja para su uso posterior.

Esto también se usa para crear una consulta recursiva.

Mesas Temporales
En SQL Server, las tablas temporales se crean en tiempo de ejecución y puede realizar todas las operaciones que puede realizar en una tabla normal. Estas tablas se crean dentro de la base de datos Tempdb. Según el alcance y el comportamiento, las tablas temporales son de dos tipos, como se indica a continuación:

Tabla de temperatura local
Las tablas temporales locales solo están disponibles para la sesión o conexión de SQL Server (significa usuario único) que creó las tablas. Estos se eliminan automáticamente cuando se cierra la sesión que creó las tablas. El nombre de la tabla temporal local se inicia con un solo signo de almohadilla (“#”).

CREATE TABLE #LocalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Shailendra','Noida');
GO
Select * from #LocalTemp

El alcance de la tabla temporal local existe para la sesión actual del usuario actual significa para la ventana de consulta actual. Si cierra la ventana de consulta actual o abre una nueva ventana de consulta e intenta encontrar la tabla temporal creada anteriormente, le dará el error.

Tabla de temperatura global
Las tablas temporales globales están disponibles para todas las sesiones o conexiones de SQL Server (significa todo el usuario). Estos pueden ser creados por cualquier usuario de conexión de SQL Server y se eliminan automáticamente cuando se han cerrado todas las conexiones de SQL Server. El nombre de la tabla temporal global se inicia con el signo de almohadilla doble (“##”).

CREATE TABLE ##GlobalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Shailendra','Noida');
GO
Select * from ##GlobalTemp

Las tablas temporales globales son visibles para todas las conexiones de SQL Server, mientras que las tablas temporales locales son visibles solo para la conexión actual de SQL Server.

Variable de tabla
Esto actúa como una variable y existe para un lote particular de ejecución de consultas. Se deja caer una vez que sale del lote. Esto también se crea en la base de datos Tempdb pero no en la memoria. Esto también le permite crear una clave principal, una identidad en el momento de la declaración de la variable de la tabla, pero no un índice no agrupado.

 GO
 DECLARE @TProduct TABLE
 (
 SNo INT IDENTITY(1,1),
 ProductID INT,
 Qty INT
 ) 
 --Insert data to Table variable @Product 
 INSERT INTO @TProduct(ProductID,Qty)
 SELECT DISTINCT ProductID, Qty FROM ProductsSales ORDER BY ProductID ASC 
 --Select data
 Select * from @TProduct

 --Next batch
 GO
 Select * from @TProduct --gives error in next batch

Nota
Las tablas temporales se crean físicamente en la base de datos Tempdb. Estas tablas actúan como la tabla normal y también pueden tener restricciones, índice como tablas normales.

CTE es un conjunto de resultados temporal con nombre que se utiliza para manipular los datos de subconsultas complejas. Esto existe para el alcance de la declaración. Esto se crea en la memoria en lugar de en la base de datos Tempdb. No puede crear ningún índice en CTE.

La variable de tabla actúa como una variable y existe para un lote particular de ejecución de consultas. Se deja caer una vez que sale del lote. Esto también se crea en la base de datos Tempdb pero no en la memoria.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *