Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SELECT * INTO запазва ORDER BY в SQL Server 2008, но не и 2012

Как можете да разберете какъв е редът в таблица, като използвате select * from #result ? Няма гаранция за поръчката в select заявка.

Резултатите обаче са различни при SQL Fiddle. Ако искате да гарантирате, че резултатите са еднакви, добавете първичен ключ. Тогава редът за вмъкване е гарантиран:

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;

Все още ненавиждам да правя select * from Result след това. Но да, той ги връща в правилния ред както в SQL Server 2008, така и в 2012. Не само това, но тъй като SQL Server гарантира, че първичните ключове са вмъкнати в правилния ред, дори се гарантира, че записите са в правилния ред в този случай.

НО . . . това, че записите са в определен ред на страниците, не означава, че ще бъдат извлечени в този ред без order by клауза.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Динамична PIVOT заявка на SQL Server?

  2. Уебинар:Проследяване на напредъка на заявките в SQL Server

  3. Как да получите всички таблици, които имат ограничение за първичен ключ, създадени в база данни на SQL Server - SQL Server / TSQL Урок 57

  4. Заявка за проверка на припокриващи се диапазони в sql сървър?

  5. Актуализирайте SQL с последователно номериране