Rækker i en tabel er uordnet, så det giver ikke mening at tale om, at rækker er i orden. Og resultatsættet fra en forespørgsel er uordnet, medmindre du bruger en order by
klausul.
Når det er sagt, kan du have den samme effekt ved at placere rækker i en tabel på en ordnet måde. Her er en metode.
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;
Id-kolonnen er garanteret i den rigtige rækkefølge. I praksis ser det ud til, at rækkerne vil blive indsat i rækkefølge. Strengt taget er indsættelsesrækkefølgen ikke garanteret, selvom værdierne af id'et er ordnet korrekt.
Som nævnt i kommentaren kan du også gøre:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
Du kan gøre dette, fordi tabellen er tom. Som en primær nøgle skal dataene indsættes i rækkefølge.
Dog som en note. Forespørgslen:
select *
from new_table;
garanterer ikke rækkefølgen af resultaterne. Det gør ingen forskel, hvilken indsætningsrækkefølge der er i tabellen. Du kan ikke stole på, at resultaterne er i en bestemt rækkefølge, bare fordi rækkerne blev ordnet på den måde. For eksempel, i et multi-threaded miljø, vil resultaterne generelt ikke være i orden, enten i teorien eller i praksis.