sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan arrangerer man rækker af en tabel i stigende rækkefølge og gemmer tabellen samtidigt?

Rækker i en tabel er uordnet, så det giver ikke mening at tale om, at rækker er i orden. Og resultatsættet fra en forespørgsel er uordnet, medmindre du bruger en order by klausul.

Når det er sagt, kan du have den samme effekt ved at placere rækker i en tabel på en ordnet måde. Her er en metode.

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-kolonnen er garanteret i den rigtige rækkefølge. I praksis ser det ud til, at rækkerne vil blive indsat i rækkefølge. Strengt taget er indsættelsesrækkefølgen ikke garanteret, selvom værdierne af id'et er ordnet korrekt.

Som nævnt i kommentaren kan du også gøre:

alter table new_table add new_table_id int identity(1, 1) not null primary key;
 

Du kan gøre dette, fordi tabellen er tom. Som en primær nøgle skal dataene indsættes i rækkefølge.

Dog som en note. Forespørgslen:

select *
from new_table;
 

garanterer ikke rækkefølgen af ​​resultaterne. Det gør ingen forskel, hvilken indsætningsrækkefølge der er i tabellen. Du kan ikke stole på, at resultaterne er i en bestemt rækkefølge, bare fordi rækkerne blev ordnet på den måde. For eksempel, i et multi-threaded miljø, vil resultaterne generelt ikke være i orden, enten i teorien eller i praksis.



  1. Sådan ændres skemaet for et objekt (tabel, visning, lagret procedure) i SQL Server-database - SQL Server / TSQL vejledning del 28

  2. Hvad betyder PÅ [PRIMÆR]?

  3. Lagring af revisioner af relationelle objekter på en effektiv måde

  4. Hvad er forskellen mellem REFERENCER med eller uden en UDENLANDSKE NØGLE