Hvordan kan du se, hvad rækkefølgen er inde i en tabel ved at bruge select * from #result
? Der er ingen garanti for rækkefølgen i en select
forespørgsel.
Resultaterne er dog anderledes på SQL Fiddle. Hvis du vil garantere, at resultaterne er de samme, skal du tilføje en primær nøgle. Så er indsættelsesrækkefølgen garanteret:
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;
Jeg afskyr stadig at select * from Result
Efter dette. Men ja, det returnerer dem i den rigtige rækkefølge i både SQL Server 2008 og 2012. Ikke nok med det, men fordi SQL Server garanterer, at primærnøgler indsættes i den rigtige rækkefølge, er posterne endda garanteret i den rigtige rækkefølge i denne sag.
MEN . . . bare fordi posterne er i en bestemt rækkefølge på siderne, betyder det ikke, at de vil blive hentet i den rækkefølge uden order by
klausul.