Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SELECT * INTO giữ lại ORDER BY trong SQL Server 2008 nhưng không phải 2012

Làm cách nào bạn có thể biết thứ tự bên trong bảng bằng cách sử dụng select * from #result ? Không có gì đảm bảo đối với đơn đặt hàng trong select truy vấn.

Tuy nhiên, kết quả khác nhau trên SQL Fiddle. Nếu bạn muốn đảm bảo rằng các kết quả là giống nhau, thì hãy thêm khóa chính. Sau đó, thứ tự chèn được đảm bảo:

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;

Tôi vẫn ghét việc select * from Result sau đây. Nhưng có, nó trả lại chúng theo đúng thứ tự trong cả SQL Server 2008 và 2012. Không chỉ vậy, nhưng vì SQL Server đảm bảo rằng các khóa chính được chèn theo thứ tự thích hợp, các bản ghi thậm chí còn được đảm bảo theo đúng thứ tự trong trường hợp này.

NHƯNG . . . chỉ vì các bản ghi theo một thứ tự cụ thể trên các trang không có nghĩa là chúng sẽ được truy xuất theo thứ tự đó mà không có order by mệnh đề.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL 'LIKE' sử dụng '%' trong đó tiêu chí tìm kiếm chứa '%'

  2. Hoàn nguyên giao dịch Entity Framework 6

  3. Chuỗi phân tách T-SQL dựa trên dấu phân cách

  4. Hàm SQL - Ghi nhật ký

  5. Phân biệt theo ngày đặt hàng và sản phẩm SQL Server 2008