sql >> Database teknologi >  >> RDS >> Sqlserver

SELECT * INTO beholder ORDER BY i SQL Server 2008, men ikke 2012

Hvordan kan du se, hvad rækkefølgen er inde i en tabel ved at bruge select * from #result ? Der er ingen garanti for rækkefølgen i en select forespørgsel.

Resultaterne er dog anderledes på SQL Fiddle. Hvis du vil garantere, at resultaterne er de samme, skal du tilføje en primær nøgle. Så er indsættelsesrækkefølgen garanteret:

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;

Jeg afskyr stadig at select * from Result Efter dette. Men ja, det returnerer dem i den rigtige rækkefølge i både SQL Server 2008 og 2012. Ikke nok med det, men fordi SQL Server garanterer, at primærnøgler indsættes i den rigtige rækkefølge, er posterne endda garanteret i den rigtige rækkefølge i denne sag.

MEN . . . bare fordi posterne er i en bestemt rækkefølge på siderne, betyder det ikke, at de vil blive hentet i den rækkefølge uden order by klausul.



  1. SQL Server - Oprette en kopi af en databasetabel og placere den i den samme database?

  2. Sådan opretter du db threadpool i Play java og laver db-forespørgsler med denne pool

  3. Kan ikke installere MySQL UDF

  4. Sådan fejlretter du SQL Server T-SQL i Visual Studio 2012