Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unerwartete Ergebnisse von CTE

An diesem Ergebnis ist nichts Unerwartetes, außer vielleicht, wenn Sie es nicht verstehen.

Jeder CTE wird each and every time aufgelöst darauf wird verwiesen. Ja, deshalb ist es möglich, dass ein einfacher CTE in einer stark transaktionalen Tabelle 4 Zeilen in einer Referenz und 5 Zeilen in den nächsten 2 Ebenen darunter zurückgibt.

In Ihrem Beispiel liegt dies jedoch an der ORDER BY NEWID(), die jeder Auflösung des ursprünglichen CTE eine andere row_number()-ing gibt. Dachten Sie, CTEs werden im Speicher gespeichert und zwischengespeichert? Auf der SQLFiddle-Site befindet sich unter Ihren Ergebnissen ein Link zum Anzeigen des Ausführungsplans. Es zeigt zwei unterschiedliche, separate Scans der Tabelle .