Hur kan du se vad ordningen är i en tabell genom att använda select * from #result
? Det finns ingen garanti för beställningen i en select
fråga.
Resultaten är dock annorlunda på SQL Fiddle. Om du vill garantera att resultaten är desamma, lägg till en primärnyckel. Då är insättningsordningen garanterad:
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;
Jag avskyr fortfarande att select * from Result
efter det här. Men ja, den returnerar dem i rätt ordning i både SQL Server 2008 och 2012. Inte bara det, utan eftersom SQL Server garanterar att primärnycklar infogas i rätt ordning, är posterna till och med garanterade i rätt ordning i detta fall.
MEN . . . bara för att posterna är i en viss ordning på sidorna betyder det inte att de kommer att hämtas i den ordningen utan order by
klausul.