sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo organizar las filas de una tabla en orden ascendente y guardar la tabla simultáneamente?

Las filas de una tabla son desordenado, por lo que no tiene sentido hablar de que las filas están en orden. Y, el conjunto de resultados de una consulta no está ordenado, a menos que use un order by cláusula.

Dicho esto, puede tener el mismo efecto al colocar filas en una tabla de manera ordenada. Aquí hay un método.

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;

Se garantiza que la columna id esté en el orden correcto. En la práctica, parece que las filas se insertarán en orden. Estrictamente hablando, no se garantiza el orden de inserción aunque los valores del id estén ordenados correctamente.

Como se menciona en el comentario, también puede hacer:

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

Puede hacer esto porque la tabla está vacía. Como clave principal, los datos deben insertarse en orden.

Eso sí, como nota. La consulta:

select *
from new_table;

no garantiza el ordenamiento de los resultados. No importa cuál sea el orden de inserción en la tabla. No puede depender de que los resultados estén en un orden particular solo porque las filas se ordenaron de esa manera. Por ejemplo, en un entorno de subprocesos múltiples, los resultados generalmente no estar en orden, ya sea en teoría o en la práctica.