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

Ordina non funzionando quando inserito nella tabella temporanea

Le tabelle SQL rappresentano non ordinate imposta. C'è qualcosa di poco chiaro in merito?

Quando SELECT da una tabella, i risultati sono non ordinati . L'unica eccezione è quando utilizzi un ORDER BY nella query esterna. Quindi, includi un ORDER BY e i risultati saranno in ordine.

MODIFICA:

Puoi eliminare il lavoro per l'ordinamento introducendo una chiave primaria in cluster.

create table #temp (
    Id int identity(1,1) primary key clustered, 
    SKU varchar(10),
    QtyRec int,
    Expiry date,
    Rec date
);

Poi quando lo fai:

insert into #temp(SKU, QtyRec, Expiry, Rec)
    select SKU, QtyRec, Expiry, Rec
    from @Data
    order by id;

La chiave primaria raggruppata in #temp è garantito che si trovi nell'ordine specificato da order by . Quindi la query:

select *
from #temp
order by id;

restituirà i risultati in ordine, utilizzando l'indice cluster. Non sarà necessario alcun ordinamento.