Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SELECT * INTO behält ORDER BY in SQL Server 2008, aber nicht 2012 bei

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.