Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Klauzula OrderBy powoduje różne zestawy wyników, gdy kolumna zamówienia ma te same dane

Jest to zgodne z projektem

SQL Server (lub dowolny RDBMS) nie gwarantuje, że wyniki zostaną zwrócone w określonej kolejności, jeśli nie ORDER BY została określona klauzula. Niektórzy uważają, że wiersze są zawsze zwracane w kolejności indeksów klastrowych lub kolejności dysków fizycznych, jeśli nie określono klauzuli order by. Jest to jednak niepoprawne, ponieważ istnieje wiele czynników, które mogą zmienić kolejność wierszy podczas przetwarzania zapytania. Równoległe złączenie HASH jest dobrym przykładem dla operatora, który zmienia kolejność wierszy.

Jeśli określisz ORDER BY SQL Server posortuje wiersze i zwróci je w żądanej kolejności. Jeśli jednak ta kolejność nie jest deterministyczna, ponieważ masz zduplikowane wartości, w każdej „grupie wartości” kolejność jest „losowa” z tych samych powodów, o których wspomniano powyżej.

Jedynym sposobem zagwarantowania deterministycznej kolejności jest uwzględnienie gwarantowanej unikatowej kolumny lub grupy kolumn (na przykład klucza podstawowego) w ORDER BY klauzula.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Automatyczne obliczanie kolumn w tabeli sql na podstawie danych z poprzedniego wiersza

  2. Kolejność warunkowa T-SQL według

  3. Jak usunąć wszystkie domyślne ograniczenia w bazie danych SQL Server — samouczek SQL Server / TSQL, część 94?

  4. Dynamiczny SQL — EXEC(@SQL) kontra EXEC SP_EXECUTESQL(@SQL)

  5. Jak dołączyć MDF bez pliku dziennika?