Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie ordnet man Zeilen einer Tabelle in aufsteigender Reihenfolge an und speichert die Tabelle gleichzeitig?

Zeilen in einer Tabelle sind ungeordnet, also macht es keinen Sinn, von geordneten Reihen zu sprechen. Und die Ergebnismenge einer Abfrage ist ungeordnet, es sei denn, Sie verwenden order by Klausel.

Das heißt, Sie können den gleichen Effekt erzielen, wenn Sie Zeilen in einer geordneten Weise in eine Tabelle einfügen. Hier ist eine 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;

Die ID-Spalte ist garantiert in der richtigen Reihenfolge. In der Praxis scheint es, dass die Zeilen der Reihe nach eingefügt werden. Genau genommen ist die Insert-Reihenfolge nicht garantiert, obwohl die Werte der ID korrekt geordnet sind.

Wie im Kommentar erwähnt, können Sie auch Folgendes tun:

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

Sie können dies tun, weil die Tabelle leer ist. Als Primärschlüssel sollten die Daten der Reihe nach eingefügt werden.

Allerdings als Anmerkung. Die Abfrage:

select *
from new_table;

garantiert nicht die Reihenfolge der Ergebnisse. Es spielt keine Rolle, wie die Einfügungsreihenfolge in die Tabelle lautet. Sie können sich nicht darauf verlassen, dass die Ergebnisse in einer bestimmten Reihenfolge vorliegen, nur weil die Zeilen so angeordnet wurden. In einer Umgebung mit mehreren Threads werden die Ergebnisse beispielsweise im Allgemeinen nicht angezeigt in Ordnung sein, entweder in der Theorie oder in der Praxis.