sql >> Databasteknik >  >> RDS >> Sqlserver

Hur ordnar man rader i en tabell i stigande ordning och sparar tabellen samtidigt?

Rader i en tabell är oordning, så det är inte meningsfullt att tala om att rader är i ordning. Och resultatuppsättningen från en fråga är oordnad, såvida du inte använder en order by klausul.

Som sagt, du kan ha samma effekt av att placera rader i en tabell på ett ordnat sätt. Här är en metod.

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-kolumnen är garanterat i rätt ordning. I praktiken verkar det som att raderna kommer att läggas in i ordning. Strängt taget är infogningsordningen inte garanterad även om värdena för id:t är korrekt ordnade.

Som nämnts i kommentaren kan du också göra:

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

Du kan göra detta eftersom tabellen är tom. Som primärnyckel ska data infogas i ordning.

Men som en notis. Frågan:

select *
from new_table;

garanterar inte ordningen av resultaten. Det spelar ingen roll vilken insättningsordning som är i tabellen. Du kan inte lita på att resultaten är i en viss ordning bara för att raderna ordnades på det sättet. Till exempel, i en miljö med flera trådar, kommer resultaten i allmänhet inte vara i ordning, antingen i teorin eller i praktiken.



  1. Hur kan jag konfigurera min Oracle tnsnames-filplats?

  2. kommandotolk logga in som en annan användare

  3. Java SQLData - Casta till användarobjekt med en lista/array?

  4. guide som primärnyckel?