sql >> Database >  >> RDS >> Sqlserver

Hoe rijen van een tabel in oplopende volgorde te rangschikken en de tabel tegelijkertijd op te slaan?

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.



  1. Is COUNT sneller dan de records ophalen en in code tellen?

  2. hoe Mysql te starten in git bash in Windows 8.1

  3. Welke lengte mag een netwerkinterfacenaam hebben?

  4. mysql-datumlijst met telling, zelfs als er geen gegevens zijn op een specifieke datum