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

Como organizar as linhas de uma tabela em ordem crescente e salvar a tabela simultaneamente?


As linhas em uma tabela são desordenado, então não faz sentido falar sobre as linhas estarem em ordem. E o conjunto de resultados de uma consulta não é ordenado, a menos que você use um order by cláusula.

Dito isso, você pode ter o mesmo efeito de colocar linhas em uma tabela de forma ordenada. Aqui está um método.
select top 0 *
into new_table
from existing_table;

alter table new_table add new_table_id int identity(1, 1);

insert into new_table(<list of columns without new_table_id>)
    SELECT <list of columns without new_table_id>
    INTO new_table
    FROM existing_table
    ORDER BY col1, col2;

A coluna id tem a garantia de estar na ordem correta. Na prática, parece que as linhas serão inseridas em ordem. A rigor, a ordem de inserção não é garantida, embora os valores do id sejam ordenados corretamente.

Como mencionado no comentário, você também pode fazer:
alter table new_table add new_table_id int identity(1, 1) not null primary key;

Você pode fazer isso porque a tabela está vazia. Como chave primária, os dados devem ser inseridos em ordem.

Como uma nota, no entanto. A pergunta:
select *
from new_table;

não garante a ordenação dos resultados. Não faz diferença qual é a ordem de inserção na tabela. Você não pode depender de os resultados estarem em uma ordem específica apenas porque as linhas foram ordenadas dessa maneira. Por exemplo, em um ambiente multithread, os resultados geralmente não estar em ordem, seja na teoria ou na prática.