Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SELECT * INTO mempertahankan ORDER BY di SQL Server 2008 tetapi tidak 2012

Bagaimana cara mengetahui urutan di dalam tabel dengan menggunakan select * from #result ? Tidak ada jaminan untuk pesanan dalam select kueri.

Namun, hasilnya berbeda pada SQL Fiddle. Jika Anda ingin menjamin bahwa hasilnya sama, maka tambahkan kunci utama. Maka urutan penyisipan dijamin:

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;

Saya masih benci melakukan select * from Result sesudah ini. Tapi ya, itu mengembalikannya dalam urutan yang benar di SQL Server 2008 dan 2012. Tidak hanya itu, tetapi karena SQL Server menjamin bahwa kunci utama dimasukkan dalam urutan yang benar, catatan bahkan dijamin dalam urutan yang benar di kasus ini.

TETAPI . . . hanya karena catatan berada dalam urutan tertentu pada halaman tidak berarti mereka akan diambil dalam urutan itu tanpa order by klausa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menjalankan set kueri SQL menggunakan file batch?

  2. CTE loop tak terbatas dengan OPTION (maxrecursion 0)

  3. String koneksi SQL Server dalam kode vs file konfigurasi di situs ASP.NET

  4. Konversi string ke nilai datetime di LINQ

  5. Cara MEMPERBARUI dari SELECT di SQL Server