Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SELECT * INTO mantiene ORDER BY in SQL Server 2008 ma non 2012

Come puoi sapere qual è l'ordine all'interno di una tabella usando select * from #result ? Non vi è alcuna garanzia per l'ordine in un select interrogazione.

Tuttavia, i risultati sono diversi su SQL Fiddle. Se vuoi garantire che i risultati siano gli stessi, aggiungi una chiave primaria. Quindi l'ordine di inserzione è garantito:

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;

Detesto ancora fare select * from Result dopodichè. Ma sì, li restituisce nell'ordine corretto sia in SQL Server 2008 che in 2012. Non solo, ma poiché SQL Server garantisce che le chiavi primarie siano inserite nell'ordine corretto, è anche garantito che i record siano nell'ordine corretto in questo caso.

MA . . . solo perché i record sono in un ordine particolare sulle pagine non significa che verranno recuperati in quell'ordine senza order by clausola.