Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment organiser les lignes d'un tableau par ordre croissant et sauvegarder le tableau simultanément ?

Les lignes d'un tableau sont non ordonné, il n'est donc pas logique de dire que les lignes sont dans l'ordre. Et, le jeu de résultats d'une requête n'est pas ordonné, sauf si vous utilisez un order by clause.

Cela dit, vous pouvez avoir le même effet en plaçant des lignes dans un tableau de manière ordonnée. Voici une méthode.

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;

La colonne id est garantie d'être dans le bon ordre. En pratique, il semble que les lignes seront insérées dans l'ordre. Strictement parlant, l'ordre d'insertion n'est pas garanti bien que les valeurs de l'id soient correctement ordonnées.

Comme mentionné dans le commentaire, vous pouvez également faire :

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

Vous pouvez le faire car la table est vide. En tant que clé primaire, les données doivent être insérées dans l'ordre.

Comme une note, cependant. La requête :

select *
from new_table;

ne garantit pas l'ordre des résultats. Peu importe l'ordre d'insertion dans la table. Vous ne pouvez pas dépendre des résultats dans un ordre particulier simplement parce que les lignes ont été ordonnées de cette façon. Par exemple, dans un environnement multithread, les résultats ne seront généralement pas être en ordre, soit en théorie, soit en pratique.