Rijen in een tabel zijn ongeordend, dus het heeft geen zin om te praten over rijen die in orde zijn. En de resultatenset van een zoekopdracht is ongeordend, tenzij u een order by
gebruikt clausule.
Dat gezegd hebbende, kunt u hetzelfde effect hebben als rijen op een geordende manier in een tabel plaatsen. Hier is een methode.
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;
De id-kolom staat gegarandeerd in de juiste volgorde. In de praktijk lijkt het erop dat de rijen op volgorde worden ingevoegd. Strikt genomen is de invoegvolgorde niet gegarandeerd, hoewel de waarden van de id correct zijn geordend.
Zoals vermeld in de opmerking, kunt u ook het volgende doen:
alter table new_table add new_table_id int identity(1, 1) not null primary key;
U kunt dit doen omdat de tabel leeg is. Als primaire sleutel moeten de gegevens op volgorde worden ingevoerd.
Wel als opmerking. De vraag:
select *
from new_table;
geeft geen garantie voor de volgorde van de resultaten. Het maakt niet uit wat de volgorde van invoegen in de tabel is. U kunt er niet op vertrouwen dat de resultaten in een bepaalde volgorde staan, alleen omdat de rijen op die manier zijn gerangschikt. In een omgeving met meerdere threads zullen de resultaten bijvoorbeeld over het algemeen niet in orde zijn, zowel in theorie als in de praktijk.