Qué es una expresión de tabla común

una expresión de tabla común, también llamada CTE en forma corta, es un conjunto de resultados con nombre temporal al que puede hacer referencia dentro de una instrucción SELECT, INSERT, UPDATE o DELETE. El CTE también se puede utilizar en una vista.

en este artículo, veremos en detalle cómo crear y usar CTEs desde nuestro servidor SQL.,

Sintaxis y ejemplos para expresiones de tabla comunes

la consulta CTE comienza con un «With» y es seguida por el nombre de la expresión. Usaremos este nombre de expresión en nuestra consulta select para mostrar el resultado de nuestra consulta CTE y escribir nuestra definición de consulta CTE.,

1
2
3
4
5

WITH expression_name ) ]
AS
( CTE_query_definition )

To view the CTE result we use a Select query with the CTE expression name.,r

1
2
3

Select * from expression_name

Common Table Expression (CTE) Types

There are two types of CTEs: Recursive and Non-Recursive

Non-Recursive CTEs

Non-Recursive CTEs are simple where the CTE doesn’t use any recursion, or repeated processing in of a sub-routine., Crearemos un CTE simple no recursivo para mostrar el número de fila del 1 al 10.

según la sintaxis CTE, cada consulta CTE comenzará con un» With » seguido del nombre de la expresión CTE con la lista de columnas.

Aquí hemos estado usando solo una columna como ROWNO. A continuación está la parte de consulta, aquí escribimos nuestra consulta select para ser ejecutada para nuestro CTE. Después de crear nuestra consulta CTE para ejecutar el CTE, use la instrucción select con nombre de expresión CTE.

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.,

CTE recursivo

Los CTE recursivos utilizan bucles de procedimiento repetidos también conocidos como recursión. La consulta recursiva se llama a sí misma hasta que la consulta satisfaga la condición. En un CTE recursivo debemos proporcionar una condición where para terminar la recursión.:

veremos cómo crear una consulta recursiva simple para mostrar el número de Fila del 1 al 10 usando un CTE.

En primer lugar declaramos la variable entera como «RowNo» y establecemos el valor predeterminado como 1 y hemos creado nuestra primera consulta CTE como un nombre de expresión, «ROWCTE»., En nuestro CTE primero mostraremos el número de fila predeterminado y luego usaremos un Union ALL para incrementar y mostrar el número de fila 1 por uno hasta que la fila No alcance el valor incrementado a 10. Para ver el resultado, usaremos una consulta select para mostrar nuestro resultado CTE.,/div>

7
8
9
10
11
12
13
Indicando @RowNo int =1;
;con ROWCTE como
(
SELECT @RowNo como ROWNO
UNIÓN
SELECCIONE ROWNO+1
DE ROWCTE
DONDE RowNo < 10
)
SELECT * FROM ROWCTE

Salida: Cuando se ejecute la consulta, podemos ver la siguiente salida.,

consulta CTE para mostrar el rango de fechas:

consideremos que hay un escenario para mostrar la fecha desde la fecha de inicio hasta la fecha de finalización, todo uno por uno como cada fila con detalles. Para mostrar los datos recursivos, utilizaremos la consulta CTE.

aquí escribiremos una consulta CTE para mostrar el rango de fechas con el número de semana y el día. Para esto establecemos la fecha de inicio y finalización en el parámetro. Aquí en este ejemplo hemos usado getdate () para establecer la fecha de inicio como fecha de hoy, y para la fecha de finalización agregamos 16 días a partir de hoy.,

CTE sin Unión All

Aquí podemos ver que hemos creado una simple consulta CTE para mostrar el RowNo, la fecha de inicio y el número de semana. Cuando ejecutamos esto ,obtendremos solo un resultado con RowNo como «1», StartDate como fecha actual y número de semana junto con el día de la semana.

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.,

CTE con Union All

para mostrar el resultado de la fecha de inicio a la fecha de finalización uno por uno como recursivo, usamos una Union All para incrementar RowNo, para agregar el día uno por uno hasta que la condición satisfaga el rango de fechas, para detener la recursión necesitamos establecer alguna condición. En este ejemplo, repetimos la recursión para mostrar nuestros registros hasta que la fecha sea menor o igual a la fecha de finalización.

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.,

múltiples CTE

en algunos escenarios, necesitamos crear más de una consulta CTE y unirlas para mostrar nuestro resultado. En este caso, podemos utilizar los múltiples CTEs. Podemos crear una consulta CTE múltiple y combinarlos en una sola consulta mediante el uso de la coma. El CTE múltiple necesita ser separado por», » coma confinado por el nombre del CTE.

usaremos el mismo ejemplo de rango de fechas para usar más de una consulta CTE, aquí podemos ver que hemos creado dos consultas CTE como CTE1 y CTE 2 para mostrar el resultado del rango de fechas tanto para CTE1 como para CTE2.,

Ejemplo:

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.

usando la consulta CTE para la tabla SQL

ahora veamos, cómo usar la consulta CTE para nuestros datos de tabla SQL server.,

Crear una Base de datos: en Primer lugar, creamos una base de datos para crear nuestra tabla

1
2
3
4
5
6
7
8
9
10
11
12
13
14

MAESTRO
IR
— 1) Compruebe que no Existe la Base de datos .,Si la base de datos existe, Suelte y cree una nueva base de datos
si existe (seleccione de sys.bases de datos WHERE = ‘CTEDB’ )
DROP DATABASE CTEDB
GO
crear base de datos CTEDB
GO
USE CTEDB
GO
div id=»0A99BD3F34″>

Crear tabla: ahora creamos una tabla de elementos de muestra en la base de datos creada.

insertar datos de muestra: insertaremos algunos registros de muestra para usar en nuestra consulta CTE.,

Cte ejemplo:

Ahora vamos a crear un resultado temporal simple usando la consulta CTE. Aquí en esta consulta CTE hemos dado el nombre de la expresión como «itemCTE» y hemos añadido la lista de columnas que utilizamos en la consulta CTE. En la consulta CTE mostramos todos los detalles del artículo con el año.

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.

CTE usando Union ALL

consideremos que hay dos escenarios a continuación para mostrar el resultado.

  1. El primer escenario es mostrar el precio de cada artículo del año en curso.,
  2. El segundo escenario es aumentar el 10% al precio de cada artículo para el próximo año.

para esto utilizamos la consulta CTE anterior. En esta consulta, agregamos la consulta UNION ALL y en UNION ALL hacemos un cálculo para agregar 10% al precio de cada artículo y mostrar en la siguiente fila con la adición de un año.

salida: cuando ejecutamos la consulta, podemos ver la salida a continuación.

Common Table Expressions (Cte) for Insert

ahora veremos cómo insertar el resultado de CTE en otra tabla. Para esto consideremos nuestra tabla de artículos anterior., Insertamos el resultado de los detalles del elemento de la consulta CTE anterior en la tabla de historial de elementos. Para esto primero creamos una tabla de historial de elementos.

Crear tabla de historial de artículos: en esta tabla de historial, agregamos las mismas columnas que la tabla de artículos junto con la columna MarketRate como precio del artículo presente o futuro. Aquí está la consulta para crear una tabla ItemHistory.

Cte insertar ejemplo:

Aquí usamos la misma consulta Cte anterior insertar el resultado en la tabla de historial de elementos. A partir de esta consulta insertamos los detalles de ambos artículos del precio del artículo del año actual junto con los precios del artículo del año siguiente agregados como 10% más.,

salida: cuando ejecutamos la consulta, podemos ver la siguiente salida como 30 registros se han insertado en nuestra tabla de historial de elementos.

Consulta de selección:

Para ver el historial del artículo resultado que seleccionar y mostrar todos los detalles.,

1
2
3

select * from ItemHistory

Salida: Cuando se ejecute la consulta, podemos ver la siguiente salida del elemento de la tabla del historial.

Crear vista con CTE ejemplo:

ahora vemos cómo utilizar la consulta CTE anterior se puede utilizar en una vista., Aquí creamos una vista y agregamos el resultado CTE dentro de la vista. Cuando seleccionamos la vista como resultado, podemos ver que se mostrará la salida CTE.

Consulta de Ejemplo:

Salida: Cuando se ejecute la consulta, podemos ver la siguiente salida como resultado de la Vista.

Cómo escribir una consulta CTE limpia:

Aquí hay algunas pautas básicas que deben seguirse para escribir una buena consulta CTE.

  1. Un CTE debe ir seguido de una sola instrucción SELECT, INSERT, UPDATE o DELETE que haga referencia a algunas o todas las columnas CTE.,
  2. Se pueden definir múltiples definiciones de consultas CTE en un CTE no recursivo.
  3. Un CTE puede hacer referencia a sí mismo y a CTEs previamente definidos en la misma cláusula WITH
  4. Podemos usar solo una cláusula With en un CTE
  5. ORDER BY, INTO, COMPUTE or COMPUTE BY, OPTION, for XML cannot be used in non-recursive CTE query definition
  6. SELECT DISTINCT, GROUP BY, HAVING, Scalar aggregation, TOP, LEFT, RIGHT, OUTER JOIN (INNER JOIN is allowed) subqueries cannot be used in a recursive CTE query definition.,

conclusión

Las CTE se pueden usar para crear una consulta recursiva y se pueden usar para hacer referencia a sí mismas varias veces. Se pueden usar CTEs en lugar de vistas y, finalmente, un CTE es fácil y simple para la legibilidad y el mantenimiento del código.

  • Autor
  • mensajes Recientes
Syed Shanu es un MVP de Microsoft, dos de tiempo CsharpCorner MVP y dos del Código de tiempo del proyecto MVP, Autor, Blogger, Conferenciante y siempre dispuestos a compartir lo que sabe a los demás.,es básicamente de Madurai, Tamil Nadu, India. Trabaja como Líder Técnico en Corea Del Sur con más de 10 años de experiencia en Tecnologías de Microsoft.
Shanu está activo en la comunidad y siempre feliz de compartir temas relacionados con ASP.NET, MVC, ASP.NET Core, WEB API, SQL Server, UWP, Azure, C#, AngularJs, Angular2. Ha escrito más de 70 artículos con diversas tecnologías en ASP.NET, SQL Server, C#, AngularJs, Angular2, ASP.NET Core, Unity 3D, Windows Universal App y Samsung Gear App development., Es varias veces ganador de TechNet Guru Gold y puede encontrar toda su contribución en MSDN y también en TechNet Wiki https://social.technet.microsoft.com/profile/syedshanu/
También es autor del eBook «consultas SQL para principiantes» puede descargar el eBook desde aquí: http://www.c-sharpcorner.com/ebooks/sql-queries-for-beginners.,
Ver todos los mensajes por Syed Shanu

Últimas entradas por Syed Shanu (ver todos)
  • SQL Server expresión de Tabla Común (CTE) – febrero 23, 2017
  • la Creación de un «inteligente» basada en trigger de auditoría para el SQL Server – 12 de diciembre, 2016