Order By ignored in SubQuery (Views) – PROBLEM

Chào mọi người,

Tôi chỉ thấy vấn đề này trong SQL 2005.

Thực hiện theo các bước sau và bạn sẽ thấy rằng ORDER BY bị bỏ qua trong truy vấn phụ:

1. Tạo chế độ xem ví dụ: SELECT * FROM [Users] ORDER BY [FirstName] …. Lưu nó thành vwUsers

2. Bây giờ chạy điều này trong Query Analyzer .. SELECT * T FROM [vwUsers]

Bạn sẽ nhận thấy rằng Sắp xếp theo sẽ bị bỏ qua. Bất cứ ai có giải pháp cho điều này?

-Yen

Re: Thứ tự bị bỏ qua trong SubQuery (Views) – PROBLEM

Hmmm. Bạn tạo Chế độ xem này như thế nào?

ORDER BY trong một lần xem là không hợp lệ về mặt kỹ thuật – ngay cả trong SS 2005. Có một cách để vượt qua nó (thông thường) trong SS 2000 bằng cách sử dụng thủ thuật “PER 100 PERCENT”

SELECT TOP 100% PERCENT * FROM [Users] ORDER BY [FirstName]

Nhưng điều đó không làm việc nữa. Về mặt kỹ thuật nó không thực sự được bảo đảm để làm việc – nó chỉ hoạt động mà nó luôn luôn làm trong SS 2005.

Đây là một tuyên bố xác nhận rằng nó chính thức bị phá vỡ:
Trong SQL Server 2005, mệnh đề ORDER BY trong định nghĩa chế độ xem chỉ được sử dụng để xác định các hàng được trả về bởi mệnh đề TOP. Mệnh đề ORDER BY không đảm bảo kết quả ra lệnh khi xem truy vấn, trừ khi ORDER BY cũng được chỉ định trong truy vấn chính nó. [1]

[1]: http://msdn2.microsoft.com/en-us/library/ms143179(SQL.90).aspx (Breaking Changes – di chuyển đến T-SQL ‘breaks’).

Các vấn đề lớn mặc dù … chỉ ORDER tập kết quả cuối cùng của bạn / cuối cùng.

Re: Thứ tự bị bỏ qua trong SubQuery (Views) – PROBLEM

Vấn đề là do trình tối ưu hóa truy vấn SQL 2005, bỏ qua PERCENT TOP 100 (100%) bởi Nhà thiết kế Xem cho bất kỳ điểm nào với một mệnh đề ORDER BY) là thừa. Tuy nhiên, bất kỳ giá trị nào của điều khoản TOP sẽ hoạt động, có hoặc không có PERCENT.

Để đảm bảo nhận được tất cả (hoặc số lượng tối đa có thể) hồ sơ của bạn trở lại, với việc sắp xếp áp dụng, chỉ cần sử dụng TOP MAX (int) hoặc TOP 2147483647 thay vì TOP (100) PERCENT. Nhưng làm điều này chỉ khi bạn hoàn toàn có một cái nhìn được sắp xếp. Chế độ xem Phân loại không hiệu quả và không chuẩn và có thể gây ra sự cố về tính tương thích trên đường. Bạn nên làm các khoản ORDER BY trong truy vấn mà các cuộc gọi các View, nó ở tất cả các có thể.

Lưu ý rằng nhà thiết kế da Vinci sử dụng trong Studio Quản lý SQL Server 2005 (Express hoặc đầy đủ, SP1 hoặc cách khác) và Access 2007 trong Chế độ Dự án (và các công cụ trước đó) sẽ tự động áp dụng TOP (100) PERCENT cho bất kỳ Xem nào có mệnh đề ORDER BY . Bạn cần phải thay đổi bằng tay. Lưu ý rằng nhà thiết kế sẽ hiển thị kết quả được sắp xếp đúng trong bảng kết quả Truy vấn Kiểm tra, nhưng kết quả thực tế sẽ không được phân loại, nếu bạn sử dụng TOP (100) PERCENT.

Đây là những lỗi mà thực sự cần phải được sửa chữa trước khi RTM phát hành, và chắc chắn trong SP1 nếu không phải là trước!

Recent Posts

Recent Comments

    Archives

    Categories

    Meta