Řádky v tabulce jsou neuspořádané, takže nemá smysl mluvit o tom, že řádky jsou v pořádku. A sada výsledků z dotazu je neuspořádaná, pokud nepoužijete order by
doložka.
To znamená, že můžete mít stejný účinek umístění řádků do tabulky uspořádaným způsobem. Zde je 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;
Sloupec id je zaručen ve správném pořadí. V praxi to vypadá, že řádky budou vkládány v pořadí. Přísně vzato, pořadí vložení není zaručeno, ačkoli hodnoty id jsou seřazeny správně.
Jak je uvedeno v komentáři, můžete také:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
Můžete to udělat, protože tabulka je prázdná. Jako primární klíč by měla být data vložena v pořadí.
Ale jako poznámku. Dotaz:
select *
from new_table;
nezaručuje pořadí výsledků. Nezáleží na tom, jaké je pořadí vložení do tabulky. Nemůžete se spoléhat na to, že výsledky budou v určitém pořadí jen proto, že řádky byly uspořádány tímto způsobem. Například v prostředí s více vlákny výsledky obecně nebudou být v pořádku, ať už teoreticky nebo prakticky.