Wiersze w tabeli są nieuporządkowane, więc nie ma sensu mówić o uporządkowaniu wierszy. Ponadto zestaw wyników z zapytania jest nieuporządkowany, chyba że użyjesz order by
klauzula.
To powiedziawszy, możesz mieć ten sam efekt, umieszczając wiersze w tabeli w uporządkowany sposób. Oto metoda.
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;
Kolumna id gwarantuje prawidłową kolejność. W praktyce wydaje się, że wiersze będą wstawiane po kolei. Ściśle mówiąc, kolejność wstawiania nie jest gwarantowana, chociaż wartości identyfikatora są uporządkowane poprawnie.
Jak wspomniano w komentarzu, możesz również wykonać:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
Możesz to zrobić, ponieważ tabela jest pusta. Jako klucz podstawowy dane powinny być wstawiane w kolejności.
Jednak jako uwaga. Zapytanie:
select *
from new_table;
nie gwarantuje uporządkowania wyników. Nie ma znaczenia, jaka jest kolejność wstawiania w tabeli. Nie można polegać na tym, że wyniki będą ułożone w określonej kolejności tylko dlatego, że wiersze zostały ułożone w ten sposób. Na przykład w środowisku wielowątkowym wyniki ogólnie nie będą być w porządku, czy to w teorii, czy w praktyce.