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.