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

Warum ist CTE besser als Cursor / abgeleitete Tabelle / Unterabfragen / temporäre Tabelle usw.?

Ein (nicht rekursiver) CTE verwendet keine Cursor. Es ist ein satzbasierter Ansatz. Das ist der große Unterschied zur Verwendung von Cursorn. Aber das gilt dann auch für den generellen Verzicht auf Cursor.

Cursor sollten möglichst vermieden werden (was uns sicher allen bewusst ist).

Ein CTE ist nicht unbedingt besser als die Verwendung einer abgeleiteten Tabelle, führt aber zu verständlicherem TSQL-Code. Ein CTE ist eigentlich nur eine Abkürzung für eine Abfrage oder Unterabfrage; so etwas wie eine temporäre Ansicht.

CTEs sind möglicherweise nicht der beste Ansatz, wenn der Abfrageplanoptimierer ungenaue Zeilenschätzungen für den CTE erhält.

Verwandte Frage:Was sind die Vor-/Nachteile der Verwendung eines CTE?