sql >> Databasteknik >  >> RDS >> Sqlserver

SELECT * INTO behåller ORDER BY i SQL Server 2008 men inte 2012

Hur kan du se vad ordningen är i en tabell genom att använda select * from #result ? Det finns ingen garanti för beställningen i en select fråga.

Resultaten är dock annorlunda på SQL Fiddle. Om du vill garantera att resultaten är desamma, lägg till en primärnyckel. Då är insättningsordningen garanterad:

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;

Jag avskyr fortfarande att select * from Result efter det här. Men ja, den returnerar dem i rätt ordning i både SQL Server 2008 och 2012. Inte bara det, utan eftersom SQL Server garanterar att primärnycklar infogas i rätt ordning, är posterna till och med garanterade i rätt ordning i detta fall.

MEN . . . bara för att posterna är i en viss ordning på sidorna betyder det inte att de kommer att hämtas i den ordningen utan order by klausul.



  1. SQL Server 2017:Tillgängliga funktioner på Linux

  2. Är Oracles ORA_HASH slumpmässig?

  3. Skapa en ny databas och ny anslutning i Oracle SQL Developer

  4. Hur exporterar man mysql-databas till en annan dator?