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.