sql >> Database teknologi >  >> RDS >> Sqlserver

Uventede resultater fra CTE

Der er intet uventet ved det resultat, undtagen måske hvis du ikke forstår det.

Hver CTE løses each and every time det er refereret. Ja, det er derfor, det er muligt for en simpel CTE på en meget transaktionstabel at returnere 4 rækker i én reference og 5 rækker i de næste 2 niveauer ned.

På din prøve er det dog på grund af ORDER BY NEWID(), der giver hver opløsning af den originale CTE en anden row_number()-ing. Troede du, at CTE'er er gemt i hukommelsen og cachelagret? På SQLFiddle-siden, under dine resultater, er der et "se udførelsesplan"-link. Den viser 2 forskellige, separate scanninger af tabellen .




  1. Exec lagret procedure i dynamisk temp tabel

  2. Lagring af statistiske data, skal jeg bruge DECIMAL, FLOAT eller DOUBLE?

  3. Automatisk indeksstyring i Azure SQL-database

  4. Oracle SQL-timers forskel mellem datoer i TT:MM:SS