2013/05/30

CREANDO TABLAS TEMPORALES

En el foro de Microsoft en Línea, uno de los lineamientos principales o recomendaciones, es que al momento de realizar una pregunta es necesario detallar los scripts de creación de tablas ( conocido como DDL Data Definition Language ) para poder reproducir el escenario y poder ofrecer una respuesta más concreta. Algunas personas prefieren especificar la creación de la tabla utilizando tablas temporales, les mostraré algunas de las maneras para poder crear una tabla temporal.

CREATE TABLE #nombreTabla

Creamos una tabla temporal de la misma forma que una tabla común, con la sentencia CREATE TABLE la única diferencia es el símbolo # antes del nombre de la tabla:

CREATE TABLE #tablaTemporal( productDescriptionID INT , description NVARCHAR(400) )
Estas tablas son creadas en la base de datos tempdb, en la carpeta llamada Temporary Tables:
Cabe aclarar que si cerramos la conexión actual, esta tabla se eliminará. Por ello, este tipo de tablas temporales es conocida como Tablas Temporales Locales.

CREATE TABLE ##nombreTabla

CREATE TABLE ##tablaTemporal( productDescriptionID INT , description NVARCHAR(400) )
Al igual que las Tablas Temporales Locales, las Tablas Temporales Globales son creadas en la base de datos tempdb, en la carpeta Temporary Tables.
Este tipo de tablas temporales se eliminan cuando todas las conexiones ligadas a ella se desconectan.

CTE ( Common Table Expressions )

A diferencia de las anteriores, este tipo de tabla temporal solo puede ser utilizado durante la ejecución del bloque de código y solo en una ocasión después de haber declarado el CTE.

USE AdventureWorks2012
;WITH nombreCTE  ( idProducto , Descripcion )
AS
(
       SELECT ProductDescriptionID, Description FROM Production.ProductDescription
)
SELECT * FROM nombreCTE;
O también de la siguiente forma, solo que así nos tendremos que adaptar a los nombres de columna que nuestro query arroje:
USE AdventureWorks2012
;WITH nombreCTE 
AS
(
       SELECT ProductDescriptionID, Description FROM Production.ProductDescription
)
SELECT * FROM nombreCTE;
Declarando varios CTE:
USE AdventureWorks2012
;WITH nombreCTE 
AS
(
       SELECT ProductDescriptionID, Description FROM Production.ProductDescription
)
, nombreCTE2
AS
(
       select * from HumanResources.Department
)
SELECT * FROM nombreCTE, nombreCTE2;
VARIABLES TIPO TABLA

Desde hace algunas versiones de SQL SERVER, se agregó la variable tipo TABLA, al igual que los CTE, solo están vigente durante la ejecución del bloque de código.
DECLARE @nombreTabla TABLE( idDescripcion INT, Descripcion NVARCHAR(400) )

INSERT INTO @nombreTabla
SELECT ProductDescriptionID, Description FROM Production.ProductDescription

SELECT * FROM @nombreTabla
En resumen, existen tablas temporales locales y globales que pueden ser creadas a partir de CREATE TABLE #nombreTabla y CREATE TABLE ##nombreTabla y pueden ser eliminadas con DROP TABLE y solo están vigentes durante la conexión o conexiones que fueron abiertas.

A diferencia de los CTEs y variables TIPO TABLA estás solo están vigentes durante menor tiempo, las primeras solo durante el bloque de código y pueden ser llamadas solo una vez, las segundas solo durante el bloque de código en ejecución.

Otra gran ventaja de los CTEs es que es posible hacer referencia dentro de la misma declaración del CTE mejor conocido como CTE Recursivo, en otra entrega les mostraré como lograr esto.

SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario