sql >> Databasteknik >  >> RDS >> Sqlserver

OrderBy-satsen resulterar i olika resultatuppsättningar när orderkolumnen har samma data

Detta är "genom design"

SQL Server (eller något RDBMS) garanterar inte att resultat returneras i en viss ordning om ingen ORDER BY klausul specificerades. Vissa människor tror att raderna alltid returneras i klustrad indexordning eller fysisk diskordning om ingen order by-sats anges. Det är dock felaktigt eftersom det finns många faktorer som kan ändra radordningen under frågebehandlingen. En parallell HASH-join är ett bra exempel för en operator som ändrar radordningen.

Om du anger en ORDER BY klausul, kommer SQL Server att sortera raderna och returnera dem i önskad ordning. Men om den ordningen inte är deterministisk eftersom du har dubbla värden, är ordningen inom varje "värdegrupp" "slumpmässig" av samma skäl som nämnts ovan.

Det enda sättet att garantera en deterministisk ordning är att inkludera en garanterad unik kolumn eller kolumngrupp (till exempel den primära nyckeln) i ORDER BY klausul.



  1. Hur kör man flera SQL-kommandon i en enda SQL-anslutning?

  2. Infoga en underordnad nod i en XMLTYPE-kolumn

  3. Källkontroll och lagrade procedurer

  4. Hur kontrollerar man om en array innehåller en viss sträng?