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

Die OrderBy-Klausel führt zu unterschiedlichen Resultsets, wenn die Sortierspalte dieselben Daten enthält

Dies ist "absichtlich"

SQL Server (oder jedes andere RDBMS) garantiert nicht, dass Ergebnisse in einer bestimmten Reihenfolge zurückgegeben werden, wenn kein ORDER BY vorhanden ist Klausel angegeben wurde. Einige Leute denken, dass die Zeilen immer in der Reihenfolge der gruppierten Indizes oder der physischen Festplatten zurückgegeben werden, wenn keine order by-Klausel angegeben ist. Dies ist jedoch falsch, da es viele Faktoren gibt, die die Zeilenreihenfolge während der Abfrageverarbeitung ändern können. Ein paralleler HASH-Join ist ein gutes Beispiel für einen Operator, der die Zeilenreihenfolge ändert.

Wenn Sie einen ORDER BY angeben -Klausel sortiert SQL Server die Zeilen und gibt sie in der angeforderten Reihenfolge zurück. Wenn diese Reihenfolge jedoch nicht deterministisch ist, weil Sie doppelte Werte haben, ist die Reihenfolge innerhalb jeder "Wertgruppe" aus denselben oben genannten Gründen "zufällig".

Die einzige Möglichkeit, eine deterministische Reihenfolge zu garantieren, besteht darin, eine garantiert eindeutige Spalte oder Spaltengruppe (z. B. den Primärschlüssel) in ORDER BY aufzunehmen Klausel.