Ich habe eine vom Entity Framework generierte Abfrage, die falsche Ergebnisse in einer SQL Server 2005-Datenbank (Microsoft SQL Server 2005 - 9.00.5000.00 (X64)) zurückgibt, aber in SQL Server 2012 (Microsoft SQL Server 2012 - 11.0.2100.60) gut ist.
Hier ist die Abfrage:
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
Ich habe es vereinfacht, aber das Modell ist:
TableA
int tableAid
int tableCid
tableB
int tableBid
int tableAid
int rank
tableC
int tableCid
int rank
Es gibt eine viele zu viele Beziehung zwischen A und B und eine 1 zu 1 zwischen A und C.
Unter SQL Server 2005 wird diese Abfrage nach der Rangspalte der Ergebnisse sortiert, nicht nach Project2.rank. Wenn ich [Projekt2]. [Rang1] AS [Rang] in SELECT durch [Projekt2]. [Rang1] AS [was auch immer] ersetze, werden die Ergebnisse korrekt sortiert. Da diese Aliase jedoch von EF generiert werden, kann ich sie nicht einfach ändern. Unter SQL Server 2012 funktioniert die Abfrage unverändert.
Kennt jemand diesen Fehler? Gibt es einen Patch oder einige Einstellungen für SQL Server 2005, um dieses Problem zu vermeiden?