Hoe kun je zien wat de bestelling in een tafel is door select * from #result
te gebruiken? ? Er is geen garantie met betrekking tot de bestelling in een select
vraag.
De resultaten zijn echter anders op SQL Fiddle. Als je wilt garanderen dat de resultaten hetzelfde zijn, voeg dan een primaire sleutel toe. Dan is de plaatsingsvolgorde gegarandeerd:
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;
Ik verafschuw nog steeds het doen van select * from Result
na dit. Maar ja, het geeft ze wel in de juiste volgorde terug in zowel SQL Server 2008 als 2012. Niet alleen dat, maar omdat SQL Server garandeert dat primaire sleutels in de juiste volgorde worden ingevoegd, zijn de records zelfs gegarandeerd in de juiste volgorde in dit geval.
MAAR . . . alleen omdat de records in een bepaalde volgorde op de pagina's staan, betekent niet dat ze in die volgorde worden opgehaald zonder order by
clausule.