我们的应用程序中有两个表,每个表都有一个ShowOrder列。我们在应用程序中使用NHibernate,并使用HQL连接这两个表,它们分别由第一个表和第二个表的ShowOrder排序。

这是我的查询的简化版本:

SELECT pr.Id as Id,pr.Title as Title, pr.ShowOrder as ShowOrder
FROM Process pr
    INNER JOIN ProcessGroup prg ON pr.GroupId=prg.Id
ORDER BY prg.ShowOrder,pr.ShowOrder

通常,我们的应用程序可以正常运行。但是我们有一个旧的应用程序和一个转换例程,可以将其数据库转换为我们的新应用程序数据库。

每当我们将旧数据库转换为新数据库时,当SQL Server要执行上述查询时,都会发生错误。异常说明:



如果我们选择不带别名的pr.ShowOrder,则一切正常。

似乎如果选择列表中有ShowOrder别名,则SQL Server会忽略表别名,并假定pr.ShowOrderprg.ShowOrder相同。

最佳答案

这是SQL Server 2000和SQL Server 2005之间的行为更改

http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/198b29db-f223-4aaf-a9f2-965c8a1fa8eb

关于sql-server - 别名在OrderBy中被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1367154/

10-13 00:01