sql >> Databasteknik >  >> RDS >> Sqlserver

Oväntade resultat från CTE

Det finns inget oväntat med det resultatet, utom kanske om du inte förstår det.

Varje CTE löses each and every time det hänvisas till. Ja, det är därför det är möjligt för en enkel CTE på en mycket transaktionstabell att returnera 4 rader i en referens och 5 rader i de nästa 2 nivåerna nedåt.

På ditt prov är det dock på grund av ORDER BY NEWID(), vilket ger varje upplösning av den ursprungliga CTE en annan row_number()-ing. Trodde du att CTE:er lagras i minnet och cachelagras? På SQLFiddle-webbplatsen, under dina resultat, finns länken "visa exekveringsplan". Den visar 2 distinkta, separata skanningar av tabellen .




  1. Infoga, vid dubblettuppdatering i PostgreSQL?

  2. Hur man lägger till en loggfil till en SQL Server-databas (T-SQL)

  3. Det går inte att släppa en MySQL-tabell på grund av begränsningar för främmande nyckel

  4. Skaffa och installera Microsoft SQL Server Management Studio