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

Come disporre le righe di una tabella in ordine crescente e salvare la tabella contemporaneamente?

Le righe in una tabella sono non ordinato, quindi non ha senso parlare di righe in ordine. Inoltre, il set di risultati di una query non è ordinato, a meno che non utilizzi un order by clausola.

Detto questo, puoi avere lo stesso effetto di posizionare le righe in una tabella in modo ordinato. Ecco un metodo.

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;

La colonna id è garantita nell'ordine corretto. In pratica sembra che le righe vengano inserite in ordine. A rigor di termini, l'ordine di inserimento non è garantito sebbene i valori dell'id siano ordinati correttamente.

Come accennato nel commento, puoi anche fare:

alter table new_table add new_table_id int identity(1, 1) not null primary key;

Puoi farlo perché il tavolo è vuoto. Come chiave primaria, i dati devono essere inseriti in ordine.

Come nota, però. La domanda:

select *
from new_table;

non garantisce l'ordinamento dei risultati. Non fa differenza quale sia l'ordine di inserimento nella tabella. Non puoi dipendere dal fatto che i risultati siano in un ordine particolare solo perché le righe sono state ordinate in quel modo. Ad esempio, in un ambiente multi-thread, i risultati generalmente non saranno essere in ordine, in teoria o in pratica.