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

SELECT * INTO zachowuje ORDER BY w SQL Server 2008, ale nie 2012

Jak możesz stwierdzić, jakie zamówienie znajduje się w tabeli, używając select * from #result? ? Nie ma gwarancji co do zamówienia w select zapytanie.

Jednak wyniki są inne w SQL Fiddle. Jeśli chcesz zagwarantować, że wyniki są takie same, dodaj klucz podstawowy. Wtedy zamówienie reklamowe jest gwarantowane:

CREATE TABLE MyTable(Name VARCHAR(50), SortOrder INT)
INSERT INTO MyTable SELECT 'b', 2 UNION ALL SELECT 'c', 3 UNION ALL SELECT 'a', 1 UNION ALL SELECT 'e', 5 UNION ALL SELECT 'd', 4


select top 0 * into result from MyTable;

alter table Result add id int identity(1, 1) primary key;

insert into Result(name, sortorder)
    SELECT * FROM MyTable
    ORDER BY SortOrder;

Nadal nie znoszę robienia select * from Result po tym. Ale tak, zwraca je we właściwej kolejności zarówno w SQL Server 2008, jak i 2012. Nie tylko to, ale ponieważ SQL Server gwarantuje, że klucze podstawowe są wstawiane we właściwej kolejności, gwarantuje się nawet, że rekordy będą we właściwej kolejności w w tym przypadku.

ALE . . . tylko dlatego, że rekordy są w określonej kolejności na stronach, nie oznacza, że ​​zostaną pobrane w tej kolejności bez 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. SQL Server wykonuje kopię zapasową za pomocą C#

  2. Jak mogę sprawdzić, czy mój async/await używa portu zakończenia we/wy?

  3. jakie są ustawienia rejestru, aby włączyć TCP w SQL Server 2005 i 2008?

  4. Zmiana kolumny danych z varchar(max) na nvarchar(max) w SQL Server 2008

  5. Plan oparty na zestawach działa wolniej niż funkcja o wartości skalarnej z wieloma warunkami