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