sql >> Database >  >> RDS >> Sqlserver

OrderBy-clausule resulteert in verschillende resultaatsets wanneer de orderkolom dezelfde gegevens heeft

Dit is "door ontwerp"

SQL Server (of een RDBMS) garandeert niet dat resultaten in een bepaalde volgorde worden geretourneerd als er geen ORDER BY is clausule was opgegeven. Sommige mensen denken dat de rijen altijd worden geretourneerd in geclusterde indexvolgorde of fysieke schijfvolgorde als er geen clausule is opgegeven. Dat is echter onjuist, aangezien er veel factoren zijn die de rijvolgorde tijdens de queryverwerking kunnen veranderen. Een parallelle HASH-join is een goed voorbeeld voor een operator die de rijvolgorde verandert.

Als u een ORDER BY . opgeeft clausule, sorteert SQL Server de rijen en retourneert ze in de gevraagde volgorde. Als die volgorde echter niet bepalend is omdat je dubbele waarden hebt, is de volgorde binnen elke "waardegroep" om dezelfde redenen als hierboven vermeld "willekeurig".

De enige manier om een ​​deterministische volgorde te garanderen, is door een gegarandeerde unieke kolom of kolomgroep (bijvoorbeeld de primaire sleutel) op te nemen in de ORDER BY clausule.



  1. Welke rij (in volgorde van een kolom) in een tabel komt overeen met een rij in een andere tabel?

  2. Enkele aanhalingstekens ontsnappen in SQL Server

  3. SQLAlchemy declaratief:triggers en indexen definiëren (Postgres 9)

  4. Ondersteunt mysqldump een voortgangsbalk?