Wie können Sie mit select * from #result
feststellen, was die Reihenfolge in einer Tabelle ist ? Für die Reihenfolge in einem select
gibt es keine Gewähr Abfrage.
Bei SQL Fiddle sind die Ergebnisse jedoch unterschiedlich. Wenn Sie garantieren möchten, dass die Ergebnisse gleich sind, fügen Sie einen Primärschlüssel hinzu. Dann ist die Insertionsreihenfolge garantiert:
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;
Ich verabscheue es immer noch, select * from Result
danach. Aber ja, es gibt sie sowohl in SQL Server 2008 als auch in 2012 in der richtigen Reihenfolge zurück. Nicht nur das, sondern weil SQL Server garantiert, dass die Primärschlüssel in der richtigen Reihenfolge eingefügt werden, sind die Datensätze sogar garantiert in der richtigen Reihenfolge diesem Fall.
ABER . . . Nur weil die Datensätze in einer bestimmten Reihenfolge auf den Seiten sind, bedeutet das nicht, dass sie in dieser Reihenfolge ohne order by
abgerufen werden Klausel.