Các lựa chọn thay thế cho mệnh đề ORDER BY trong View là gì?


12

Câu hỏi này chỉ cần có trong trang web này :)

ORDER BY bị cấm sử dụng trong một chế độ xem, như tôi đã hiểu vì khả năng nhiều đơn hàng khi sử dụng chế độ xem này.

Tôi biết rằng có nhiều cách để vượt qua giới hạn này, ví dụ TOP 99.999999 PERCENT, nhưng tôi muốn biết đâu là cách thực hành tốt nhất, chứ không phải làm thế nào để hack nó.

Vì vậy, nếu tôi muốn tạo chế độ xem trong cơ sở dữ liệu của mình để sử dụng cá nhân, nghĩa là tôi muốn kết nối với cơ sở dữ liệu và chỉ xem dữ liệu được cố định và sắp xếp, tôi nên làm thế nào nếu tôi không thể đặt hàng xem?

Hiện tại trong SQL Server DB của tôi, tôi có quan điểm với vụ TOPhack và tôi đang sử dụng chúng rất nhiều, nhưng cảm thấy không ổn.


1
Tại sao không phải TOP 100%?
garik

@garik - bởi vì nó vẫn không đảm bảo việc đặt hàng nếu tôi hiểu chính xác liên kết của gbn. Đó chỉ là một câu trả lời sai ngắn gọn hơn
Jack nói hãy thử topanswers.xyz

1
@Jack Douglas đó không phải là một câu trả lời, đó là một nhận xét về top
99.999

@garik - trong SQL Server 2008, TOP 100 PERCENT bị bỏ qua và chỉ sử dụng 99 là hoạt động. Tôi nghĩ rằng nó đã được sửa nhưng phiên bản của tôi không được cập nhật.
yellowblood

1
Đây không phải là một giới hạn kỹ thuật. Đây là do thiết kế. Đó là lý do tại sao bất kỳ cách giải quyết khác cảm thấy như một hack. Đặt hàng của bạn trong các truy vấn đối với quan điểm. Một lệnh áp dụng cho tập kết quả (đầu ra truy vấn e.ge), không phải là tập hợp dữ liệu (ví dụ: dạng xem hoặc bảng).
Nick Chammas

Câu trả lời:


2

Không có thứ gọi là chế độ xem "theo thứ tự" vì chế độ xem được coi là một tập hợp các hàng. Sử dụng một thủ tục được lưu trữ nếu bạn muốn một thứ tự cố định.


Đây là câu trả lời giải thích lý do tại sao bạn không thể áp đặt một thứ tự bên trong một định nghĩa chế độ xem. Một bộ, theo định nghĩa, không có một trật tự. Tuy nhiên, khi bạn kết hợp TOPvới ORDER BY, bạn hiện đang xác định một bộ mới vì thứ tự ảnh hưởng đến hàng nào là "trên cùng"; đây là lý do tại sao TOPcho phép bạn sử dụng ORDER BYtrong một định nghĩa xem.
Nick Chammas

9

Chỉ thứ tự ngoài cùng mới đảm bảo trật tự

  • Bất kỳ thứ tự trung gian hoặc nội bộ BY được bỏ qua.
    Điều này bao gồm ĐẶT HÀNG B inNG trong một khung nhìn
  • Không có thứ tự ngụ ý trong bất kỳ bảng
  • Không có thứ tự ngụ ý từ bất kỳ chỉ mục nào (được nhóm hay không) trên bảng đó

Liên kết

ORDER BY đảm bảo kết quả được sắp xếp chỉ cho câu lệnh CHỌN ngoài cùng của truy vấn. Ví dụ: xem xét định nghĩa chế độ xem sau: (và ví dụ sau phù hợp với câu hỏi này)


Cảm ơn bạn đã làm rõ, nhưng đó không phải là câu trả lời mà tôi đang tìm kiếm :) Tôi đang cố gắng xem loại thay thế nào có sẵn cho ĐẶT HÀNG rất thuận tiện trong chế độ xem.
yellowblood

3

Thêm một thứ tự BY vào đầu ra của khung nhìn tức là

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
Không có thứ tự ngụ ý bởi chỉ số cụm. -1.
gbn

@SqlACID - chỉnh sửa tốt, +1 thay vì -1 :)
Jack nói hãy thử topanswers.xyz

Điều này có nghĩa là bạn cần viết lại thứ tự theo mệnh đề mỗi khi bạn truy vấn chế độ xem, đây là điều chúng tôi đang cố gắng tránh khi chúng tôi sử dụng thứ tự bên trong chế độ xem.
yellowblood

như dportas đã nói, một trình bao bọc Proc được lưu trữ xung quanh truy vấn sẽ hoạt động, nhưng có lẽ không phải là thứ bạn đang tìm kiếm.
SqlACID

Tôi thực sự đã thử thủ tục lưu trữ nhưng nó không dễ dàng và đủ nhanh để truy vấn hoặc thao tác. Meh.
yellowblood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.