Tôi có một truy vấn được tạo bởi khung thực thể trả về kết quả sai trên cơ sở dữ liệu SQL Server 2005 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64)) nhưng tốt trên SQL Server 2012 (Microsoft SQL Server 2012 - 11.0.2100.60).
Đây là truy vấn:
SELECT
[Project2].[tableAid] AS [id],
[Project2].[rank1] AS [rank]
FROM ( SELECT
[Extent1].[id] AS [id],
[Extent2].[rank] AS [rank],
[Extent4].[rank] AS [rank1]
FROM [dbo].[tableA] AS [Extent1]
LEFT OUTER JOIN [dbo].[tableB] AS [Extent2] ON ([Extent1].[tableAid] = [Extent2].[tableAid]) AND (896 = [Extent2].[tableBid])
INNER JOIN [dbo].[tableC] AS [Extent4] ON [Extent1].[tableCid] = [Extent4].[tableCid]
) AS [Project2]
ORDER BY [Project2].[rank] DESC
Tôi đã đơn giản hóa nó nhưng mô hình là:
TableA
int tableAid
int tableCid
tableB
int tableBid
int tableAid
int rank
tableC
int tableCid
int rank
Có rất nhiều mối quan hệ giữa A và B và 1 đến 1 giữa A và C.
Trên SQL Server 2005, truy vấn này được sắp xếp theo cột thứ hạng của kết quả, không phải bởi Project2.rank. Nếu tôi thay thế [Project2]. [Rank1] AS [rank] trong CHỌN bởi [Project2]. [Rank1] AS [sao], kết quả được sắp xếp chính xác. Nhưng vì các bí danh này được tạo bởi EF, tôi không thể dễ dàng thay đổi chúng. Trên SQL Server 2012, truy vấn hoạt động chính xác.
Có ai biết lỗi này không? Có một bản vá hoặc một số cài đặt cho SQL Server 2005 để tránh vấn đề này không?