Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Commander en ne fonctionnant pas lors de l'insertion dans la table temporaire

Les tables SQL représentent non ordonnées ensembles. Y a-t-il quelque chose qui n'est pas clair à ce sujet ?

Lorsque vous SELECT d'un tableau, alors les résultats sont non ordonnés . La seule exception est lorsque vous utilisez un ORDER BY dans la requête externe. Donc, incluez un ORDER BY et les résultats seront dans l'ordre.

MODIFIER :

Vous pouvez éliminer le travail pour le tri en introduisant une clé primaire clusterisée.

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

Ensuite, lorsque vous faites :

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

La clé primaire en cluster dans #temp est garanti d'être dans l'ordre spécifié par le order by . Puis la requête :

select *
from #temp
order by id;

renverra les résultats dans l'ordre, en utilisant l'index clusterisé. Aucun tri ne sera nécessaire.