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

OrderBy-klausulen resulterer i forskellige resultatsæt, når ordrekolonnen har samme data

Dette er "by design"

SQL Server (eller nogen RDBMS) garanterer ikke, at resultater returneres i en bestemt rækkefølge, hvis ingen ORDER BY klausul blev specificeret. Nogle mennesker tror, ​​at rækkerne altid returneres i klynget indeksrækkefølge eller fysisk diskrækkefølge, hvis der ikke er angivet nogen orden efter klausul. Det er dog forkert, da der er mange faktorer, der kan ændre rækkefølgen under forespørgselsbehandlingen. En parallel HASH join er et godt eksempel for en operator, der ændrer rækkefølgen.

Hvis du angiver en ORDER BY klausul, vil SQL Server sortere rækkerne og returnere dem i den ønskede rækkefølge. Men hvis denne rækkefølge ikke er deterministisk, fordi du har duplikerede værdier, er rækkefølgen inden for hver "værdigruppe" "tilfældig" af de samme årsager som nævnt ovenfor.

Den eneste måde at garantere en deterministisk rækkefølge på er at inkludere en garanteret unik kolonne eller kolonnegruppe (for eksempel den primære nøgle) i ORDER BY klausul.



  1. Forespørgsel på EAV SQL Design

  2. Hvad er skema i SQL Server, og hvordan man opretter/slipper skema i SQL Server-database - SQL Server / TSQL Tutorial Del 27

  3. Udfør flere SQL-sætninger med NHibernate

  4. Tilslutningspool ved hjælp af pg-løfte