Bạn có thể thay đổi ngữ nghĩa một chút bằng cách thực hiện điều này:
SELECT ZipCode FROM
(
SELECT DISTINCT ZipCode = LEFT(tz.Zipcode, 5)
FROM dbo.TerritoryZip
) AS x
ORDER BY ZipCode;
Không thực sự giải quyết được vấn đề vì truy vấn dài dòng hơn và bạn vẫn không thể tránh chạm vào nó. Bản sửa lỗi bạn đã đề xuất tốt hơn trong tâm trí tôi vì nó rõ ràng hơn về những gì đang xảy ra.
Không quá khắt khe, nhưng nếu bạn không nghĩ rằng mình có thể "tìm thấy tất cả các trường hợp của loại SQL này" thì làm sao bạn tin tưởng vào thử nghiệm của mình?
Tôi đề nghị rằng giữ chế độ 2000 không phải là câu trả lời tối ưu. Lý do là điều này có thể khiến cú pháp khác bị hỏng (ví dụ:cách bạn có thể gọi các hàm quản lý động - xem this Bài đăng trên blog của Paul Randal
và nhận xét của tôi về nó), bạn cũng có nguy cơ tồn tại mã cần được sửa (ví dụ:kiểu cũ *=
/ =*
các phép nối hợp lệ trong chế độ compat 2000, nhưng sẽ không hợp lệ khi bạn chuyển từ 2008 R2 -> Denali, không hỗ trợ 2000 compat).
Không có cài đặt "mức độ nghiêm ngặt" nhưng bạn có thể bỏ phiếu cho BẬT ĐẶT NGHIÊM CẤM CỦA Erland Sommarskog; gợi ý .