Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ordem por não funcionar ao inserir na tabela temporária


As tabelas SQL representam não ordenadas conjuntos. Há algo obscuro sobre isso?

Quando você SELECT de uma tabela, os resultados são não ordenados . A única exceção é quando você usa um ORDER BY na consulta externa. Portanto, inclua um ORDER BY e os resultados estarão em ordem.

EDITAR:

Você pode eliminar o trabalho para a classificação introduzindo uma chave primária agrupada.
create table #temp (
    Id int identity(1,1) primary key clustered, 
    SKU varchar(10),
    QtyRec int,
    Expiry date,
    Rec date
);

Então quando você faz:
insert into #temp(SKU, QtyRec, Expiry, Rec)
    select SKU, QtyRec, Expiry, Rec
    from @Data
    order by id;

A chave primária clusterizada em #temp tem a garantia de estar na ordem especificada pelo order by . Então a consulta:
select *
from #temp
order by id;

retornará os resultados em ordem, usando o índice clusterizado. Nenhum tipo será necessário.