sql >> Base de Datos >  >> RDS >> Sqlserver

Resultados inesperados de CTE

No hay nada inesperado en ese resultado, excepto quizás si no lo entiendes.

Cada CTE se resuelve each and every time se hace referencia. Sí, es por eso que es posible que un CTE simple en una tabla altamente transaccional devuelva 4 filas en una referencia y 5 filas en los siguientes 2 niveles hacia abajo.

Sin embargo, en su muestra, se debe a ORDER BY NEWID(), lo que le da a cada resolución del CTE original un número de fila diferente(). ¿Creías que los CTE se almacenan en la memoria y se almacenan en caché? En el sitio de SQLFiddle, debajo de sus resultados, hay un enlace "ver plan de ejecución". Muestra 2 escaneos distintos y separados de la tabla .