Câu hỏi: Lấy 10 hàng TOP mà không cần sử dụng TOP hoặc LIMIT?
Trả lời: Khi tôi được hỏi câu hỏi này trong Kiểm tra tình trạng hoạt động cơ sở dữ liệu toàn diện gần đây của tôi , Tôi đã hỏi ngược lại người đó tại sao anh ta muốn phát minh lại bánh xe. Tuy nhiên, khi tôi nhận được câu trả lời của anh ấy, tôi thực sự đồng ý với lý do đó.
Đây là lý do:Chúng tôi không muốn sử dụng TOP hoặc LIMIT vì chúng thực sự không phải là một triển khai ANSI. Chúng tôi muốn truy xuất các hàng trên cùng theo cách mà nó có thể hoạt động trên các cơ sở dữ liệu khác nhau như SQL Server, MySQL, MariaDB cũng như PostgreSQL.
Tất cả các cơ sở dữ liệu đã triển khai logic riêng của chúng để truy xuất các hàng trên cùng. SQL Server sử dụng TOP từ khóa trong khi MySQL, MariaDB và PostgreSQL sử dụng LIMIT từ khóa để hạn chế các hàng trong SQL Server. Điều này đưa ra những thách thức độc đáo đối với các nhà cung cấp bên thứ ba, những người đang viết mã có thể được cắm vào bất kỳ RDBMS nào. Họ phải viết các điều kiện phù thủy mã và duy trì hai phiên bản khác nhau của logic. Tuy nhiên, nếu bạn sử dụng phương pháp sau, nó sẽ hoạt động trong tất cả các phiên bản gần đây của cơ sở dữ liệu quan hệ.
CHỌN ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITIONFROM (CHỌN ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_DEFINITION, ROW_NUMBER () HẾT (ĐƠN ĐẶT HÀNG THEO ROUTINE_NAME) NHƯ ROWNUMFROM INFORMATION_SCHEMA.ROUTINESWHERE ''Điều này sẽ hoạt động với tất cả các cơ sở dữ liệu quan hệ đã biết mà tôi đã xem qua. Mặc dù chúng tôi thích sử dụng TOP và LIMIT thường xuyên, chúng tôi khuyên bạn nên tiếp tục sử dụng logic hoạt động trên nhiều cơ sở dữ liệu quan hệ.
Đây là những bài đăng trên blog khác mà bạn có thể thấy thú vị:
- SQL SERVER - Tắt Tùy chọn Cấu hình Máy chủ Tăng cường Ưu tiên trên SSMS 18 trở đi
- SQL SERVER - Tập lệnh mẫu để kiểm tra phân mảnh chỉ mục với RowCount
- Câu đố SQL - Tạo lược đồ và bảng - Trả lời mà không cần chạy mã
- Làm thế nào để biết nếu lập chỉ mục bị buộc trên truy vấn? - Câu hỏi Phỏng vấn của Tuần # 246