Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Клаузата OrderBy води до различни набори резултати, когато колоната за поръчка има едни и същи данни

Това е „по дизайн“

SQL Server (или която и да е RDBMS) не гарантира, че резултатите ще бъдат върнати в определен ред, ако няма ORDER BY беше посочена клауза. Някои хора смятат, че редовете винаги се връщат в ред на клъстерен индекс или ред на физически диск, ако не е посочен ред по клауза. Това обаче е неправилно, тъй като има много фактори, които могат да променят реда на реда по време на обработката на заявката. Паралелното HASH присъединяване е добър пример за оператор, който променя реда на редовете.

Ако посочите ORDER BY клауза, SQL Server ще сортира редовете и ще ги върне в заявения ред. Ако обаче този ред не е детерминистичен, тъй като имате дублиращи се стойности, във всяка „група стойности“ редът е „произволен“ поради същите причини, споменати по-горе.

Единственият начин да се гарантира детерминистичен ред е да се включи гарантирана уникална колона или група колони (например първичен ключ) в ORDER BY клауза.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамичен SQL (предаване на името на таблицата като параметър)

  2. Вземете начална и крайна дата на тримесечия от година

  3. Как да вмъкна арабски знаци в SQL база данни?

  4. Вътрешни елементи на SQL Server:Планово кеширане, т. II – Прекомпилиране на планове

  5. Достъп до TimeZoneInfo от SQL 2005 Server