Microsoft phân phối các bản sửa lỗi Microsoft SQL Server 2008 dưới dạng một tệp có thể tải xuống. Vì các bản sửa lỗi được tích lũy, mỗi bản phát hành mới đều chứa tất cả các bản sửa lỗi nóng và tất cả bản sửa lỗi bảo mật có trong bản phát hành sửa lỗi SQL Server 2008 trước đó.
Triệu chứng
Cân nhắc kịch bản sau.
- Bạn có một truy vấn sử dụng hàm ROW_NUMBER cùng với nối ngoài bên trái trong Microsoft SQL Server 2008.
- Bạn tạo một câu lệnh SELECT sử dụng truy vấn làm truy vấn con và trả về các hàng duy nhất bằng cách sử dụng từ khóa DISTINCT.
- Bạn chạy câu lệnh SELECT này.
Trong trường hợp này, bạn có thể nhận được kết quả sai. Nối ngoài bên trái bị bỏ qua một cách không chính xác.
Lưu ý Để biết thêm thông tin về cách tái tạo sự cố này, hãy xem tiểu mục "Các bước để tái tạo sự cố này" trong phần "Thông tin thêm".
Giải pháp
Thông tin cập nhật tích lũy
SQL Server 2008 R2
Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Bản cập nhật Tích lũy 6. Để biết thêm thông tin về cách lấy gói cập nhật tích lũy này cho SQL Server 2008 R2, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
2489376 Gói Cập nhật Tích lũy 6 cho SQL Server 2008 R2 Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các bản hotfix và tất cả bản sửa lỗi bảo mật được tích hợp trong bản phát hành bản sửa lỗi SQL Server 2008 R2 trước đó. Chúng tôi khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi gần đây nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
981356 Các bản dựng SQL Server 2008 R2 được phát hành sau khi SQL Server 2008 R2 được phát hành
SQL Server 2008 Gói Dịch vụ 1
Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Bản cập nhật tích lũy 11 dành cho SQL Server 2008 Gói Dịch vụ 1.
Để biết thêm thông tin về gói cập nhật tích lũy này, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
2413738 Gói cập nhật tích lũy 11 cho SQL Server 2008 Gói Dịch vụ 1Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các hotfix và tất cả bản sửa lỗi bảo mật có trong bản phát hành sửa lỗi SQL Server 2008 trước đó. Microsoft khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi mới nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
970365 Các bản dựng SQL Server 2008 được phát hành sau khi SQL Server 2008 Gói Dịch vụ 1 được phát hành Các hotfix Microsoft SQL Server 2008 được tạo cho các gói dịch vụ SQL Server cụ thể. Bạn phải áp dụng hotfix SQL Server 2008 Gói Dịch vụ 1 cho cài đặt SQL Server 2008 Gói Dịch vụ 1. Theo mặc định, mọi hotfix được cung cấp trong gói dịch vụ SQL Server sẽ được đưa vào gói dịch vụ SQL Server tiếp theo.
SQL Server 2008 Gói Dịch vụ 2
Bản sửa lỗi cho sự cố này được phát hành lần đầu trong Bản cập nhật Tích lũy 2 cho SQL Server 2008 Gói Dịch vụ 2. Để biết thêm thông tin về gói cập nhật tích lũy này, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
2467239 Gói cập nhật tích lũy 2 cho SQL Server 2008 Gói Dịch vụ 2Lưu ý Vì các bản dựng được tích lũy, mỗi bản phát hành bản sửa lỗi mới đều chứa tất cả các hotfix và tất cả bản sửa lỗi bảo mật có trong bản phát hành sửa lỗi SQL Server 2008 trước đó. Microsoft khuyên bạn nên cân nhắc áp dụng bản phát hành bản sửa lỗi mới nhất có chứa hotfix này. Để biết thêm thông tin, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
2402659 Các bản dựng SQL Server 2008 được phát hành sau khi SQL Server 2008 Gói Dịch vụ 2 được phát hành Các hotfix Microsoft SQL Server 2008 được tạo cho các gói dịch vụ SQL Server cụ thể. Bạn phải áp dụng hotfix SQL Server 2008 Gói Dịch vụ 2 cho cài đặt SQL Server 2008 Gói Dịch vụ 2. Theo mặc định, mọi hotfix được cung cấp trong gói dịch vụ SQL Server sẽ được đưa vào gói dịch vụ SQL Server tiếp theo.
Trạng thái
Microsoft đã xác nhận rằng đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong mục "áp dụng cho".
Xem thêm thông tin
Các bước để tái tạo sự cố này
Chạy các câu lệnh sau đây. Những câu lệnh này tạo hai bảng và chèn một số dữ liệu vào các bảng.
create table A (a1 int) create table B (b1 int) insert into A values(1) insert into B values(1) insert into B values(1)Chạy câu lệnh sau đây. Câu lệnh này sử dụng hàm ROW_NUMBER cùng với nối ngoài bên trái.
select a1, row_number() over (partition by a1 order by a1) as a3 from A left join B ON A.a1 = B.b1Chạy câu lệnh sau đây. Câu lệnh này sử dụng truy vấn ở bước 2 làm truy vấn con:
select distinct a1, a3 from ( select a1, row_number() over (partition by a1 order by a1) as a3 from A left join B ON A.a1 = B.b1 ) as x
Lưu ý: Truy vấn ở bước 3 trả về kết quả sai khi sự cố này xảy ra.
Tham khảo
Để biết thêm thông tin về hàm ROW_NUMBER và các kết nối ngoài, hãy truy cập trang web Mạng lưới Nhà phát triển Microsoft (MSDN) sau:
Để biết thêm thông tin về Mô hình Dịch vụ Gia tăng cho SQL Server, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
935897 Mô hình Dịch vụ Gia tăng có sẵn từ nhóm SQL Server để cung cấp các bản sửa lỗi nóng cho các sự cố được báo cáo
Để biết thêm thông tin về sơ đồ đặt tên cho các bản cập nhật SQL Server, hãy bấm vào số bài viết sau đây để xem bài viết trong Cơ sở Kiến thức Microsoft:
822499 Giản đồ đặt tên mới cho các gói cập nhật phần mềm Microsoft SQL Server Để biết thêm thông tin về thuật ngữ cập nhật phần mềm, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở kiến thức Microsoft:
824684 Mô tả thuật ngữ chuẩn được sử dụng để miêu tả các bản cập nhật phần mềm của Microsoft