sql >> Databáze >  >> RDS >> Sqlserver

SELECT * INTO zachová ORDER BY v SQL Server 2008, ale ne 2012

Jak můžete zjistit, jaké je pořadí v tabulce pomocí select * from #result ? Neexistuje žádná záruka ohledně objednávky v select dotaz.

Výsledky se však na SQL Fiddle liší. Pokud chcete zaručit, že výsledky budou stejné, přidejte primární klíč. Pak je objednávka vložení zaručena:

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;

Stále se mi hnusí select * from Result po tomto. Ale ano, vrací je ve správném pořadí v SQL Server 2008 i 2012. Nejen to, ale protože SQL Server zaručuje, že primární klíče jsou vloženy ve správném pořadí, je dokonce zaručeno, že záznamy budou ve správném pořadí. tento případ.

ALE . . . to, že jsou záznamy na stránkách v určitém pořadí, neznamená, že budou načteny v tomto pořadí bez order by doložka.



  1. MySQL používá jiný index v závislosti na limitní hodnotě s dotazem ORDER BY

  2. Chyba ETIMEOUT | Databáze Google Cloud SQL s NodeJS

  3. Existuje zkratka pro SELECT * FROM?

  4. Výzkum pomalosti PostGIS (vydání 2019)