Редовете в таблица са неподредени, така че няма смисъл да говорим, че редовете са подредени. И наборът от резултати от заявка е неподреден, освен ако не използвате order by
клауза.
Въпреки това можете да постигнете същия ефект от поставянето на редове в таблица по подреден начин. Ето един метод.
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 гарантирано е в правилния ред. На практика изглежда, че редовете ще бъдат вмъкнати по ред. Строго погледнато, редът на вмъкване не е гарантиран, въпреки че стойностите на идентификатора са подредени правилно.
Както бе споменато в коментара, можете също да направите:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
Можете да направите това, защото масата е празна. Като първичен ключ данните трябва да се вмъкват в ред.
Като забележка обаче. Заявката:
select *
from new_table;
не гарантира подреждането на резултатите. Няма значение какъв е редът на вмъкване в таблицата. Не можете да разчитате на това, че резултатите са в определен ред само защото редовете са подредени по този начин. Например, в многонишкова среда, резултатите общо няма да е в ред на теория или на практика.