Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Resultados inesperados do CTE


Não há nada de inesperado nesse resultado, exceto talvez se você não o entender.

Cada CTE é resolvido each and every time é referenciado. Sim, é por isso que é possível que um CTE simples em uma tabela altamente transacional retorne 4 linhas em uma referência e 5 linhas nos próximos 2 níveis abaixo.

No seu exemplo, no entanto, é por causa do ORDER BY NEWID(), dando a cada resolução do CTE original um row_number()-ing diferente. Você achou que os CTEs são armazenados na memória e armazenados em cache? No site SQLFiddle, em seus resultados, há um link "exibir plano de execução". Ele mostra 2 verificações distintas e separadas da tabela .