My Momma nói luôn hội đủ điều kiện MỌI cột trong một truy vấn với một tên bảng/bí danh giống như "luôn luôn bao gồm tất cả các tên cột trong Phụ trang" và justs như "không SELECT *", vv
Khác hơn là làm cho nó dễ dàng hơn bởi vì nó là tự tài liệu mã nguồn, bạn ngăn chặn lỗi này nếu bạn đã bao giờ thêm/thay đổi cột.
kiểm tra mức độ tương thích của bạn, có sự khác biệt giữa chúng và cách ORDER BY hoạt động!
Nói chung, ở mức độ tương thích 90 trở lên, mức mặc định cho SQL Server 2008, một ORDER BY không có bảng tên/tuyên bố bí danh tạo lỗi.
phần ALTER DATABASE Compatibility Level (Transact-SQL) see: Sự khác nhau giữa Compatibility Level 80 và Level 90
thiết lập Compatibility cấp 80
KHI ràng buộc tham chiếu cột trong ORDER BY danh sách các cột định nghĩa trong danh sách SELECT, cột không rõ ràng bị bỏ qua và cột tiền tố đôi khi bị bỏ qua. Điều này có thể khiến kết quả được đặt trở lại trong một thứ tự không mong muốn.
Ví dụ, một mệnh đề ORDER BY với một cột single gồm hai phần (.) Được sử dụng như một tham chiếu đến một cột trong một danh sách SELECT được chấp nhận, nhưng bảng bí danh được bỏ qua. Hãy xem xét truy vấn sau đây.
CHỌN c1 = -c1 TỪ t_table AS x ORDER BY x.c1
Khi thực hiện, tiền tố cột là bỏ qua trong ORDER BY. Hoạt động sắp xếp không xảy ra trên cột nguồn được chỉ định (x.c1) là được mong đợi; thay vào đó, nó xuất hiện trên cộtdẫn xuất c1 được xác định trong truy vấn . Kế hoạch thực hiện cho truy vấn này cho thấy rằng các giá trị cho cột bắt nguồn được tính trước tiên và thì các giá trị được tính toán được sắp xếp.
thiết lập Compatibility cấp 90
lỗi được nâng lên trên sự mơ hồ cột. Tiền tố cột, nếu có, được chỉ định trong ORDER BY không bị bỏ qua khi gắn vào cột được xác định trong danh sách SELECT.
Xem xét truy vấn sau.
CHỌN c1 = -c1 TỪ t_table AS x ORDER BY x.c1
Khi thực hiện, tiền tố cột trong mệnh đề ORDER BY không được bỏ qua. Hoạt động sắp xếp xảy ra trên cột được chỉ định (x.c1) như mong đợi. Kế hoạch thực hiện cho truy vấn này cho thấy rằng toán tử sắp xếp yêu cầu các hàng trả về từ t_table và sau đó các giá trị cho cột có nguồn gốc c1 được xác định trong danh sách SELECT được tính toán.
tôi chưa bao giờ tìm ra lý do tại sao bạn phải tự xác định một trong một cột tham gia bạn đang đề cập đến. Chắc chắn nếu họ tham gia họ sẽ giống nhau sao !? (có thể là một số công cụ lập chỉ mục lạ mà tôi không hiểu) –
Âm thanh thú vị (+1). Bây giờ, câu hỏi là gì ?? – Unreason
nếu sự cố không tồn tại trên các máy chủ khác, thì có thể bạn nên kiểm tra bản cập nhật sql hoặc một số cài đặt có thể? – Rob