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

SELECT * INTO retiene ORDER BY en SQL Server 2008 pero no en 2012

¿Cómo puede saber cuál es el orden dentro de una tabla usando select * from #result ? No hay garantía en cuanto al orden en un select consulta.

Sin embargo, los resultados son diferentes en SQL Fiddle. Si desea garantizar que los resultados sean los mismos, agregue una clave principal. Entonces el orden de inserción está garantizado:

CREATE TABLE MyTable(Name VARCHAR(50), SortOrder INT)
INSERT INTO MyTable SELECT 'b', 2 UNION ALL SELECT 'c', 3 UNION ALL SELECT 'a', 1 UNION ALL SELECT 'e', 5 UNION ALL SELECT 'd', 4


select top 0 * into result from MyTable;

alter table Result add id int identity(1, 1) primary key;

insert into Result(name, sortorder)
    SELECT * FROM MyTable
    ORDER BY SortOrder;

Todavía detesto hacer select * from Result después de este. Pero sí, las devuelve en el orden correcto tanto en SQL Server 2008 como en 2012. No solo eso, sino que como SQL Server garantiza que las claves primarias se inserten en el orden correcto, incluso se garantiza que los registros estén en el orden correcto en este caso.

PERO . . . el hecho de que los registros estén en un orden particular en las páginas no significa que se recuperarán en ese orden sin order by cláusula.