Active Record或NHibernate生成无效的Sql,用于在SqlQuery上进行分页

时间:2010-02-04 16:05:48

标签: nhibernate castle-activerecord

将分页(使用SetFirstResultSetMaxResults)应用于ActiveRecord SqlQuery时,使用nHibernate 2.1.1 GA和ActiveRecord 2.0.1生成以下sql:

SELECT 
    TOP 40 
FROM 
    (, ROW_NUMBER() OVER(ORDER BY account.Name, account.State) as __hibernate_sort_row 
        select  account.Name 
                <rest of query>
    ) as query 
WHERE query.__hibernate_sort_row > 40 
ORDER BY query.__hibernate_sort_row

此错误并且不会在sql中运行...而应该是

SELECT TOP 40  * 
FROM ( 
    SELECT
        ROW_NUMBER() OVER (ORDER BY account.Name, account.State) as __hibernate_sort_row 
    ,select  account.Name 
                <rest of query>
) as query 
WHERE query.__hibernate_sort_row > 40 
ORDER BY query.__hibernate_sort_row

奇怪的是:

  • 没有分页的查询工作正常
  • 通过分页,第1页工作正常(即第一个结果= 0,maxresult = 40)
  • 完全相同的方法适用于HqlQuery,只有SqlQuery受影响。

这适用于MS2005Dialect和MS2008Dialect ......

有人知道我的愚蠢问题吗?

2 个答案:

答案 0 :(得分:0)

我发现这个页面Possible SQL Server bug与标题相反,表明我需要在我的sql中编写它。没有花费半天的时间尝试就没问题。

任何人都可以确认这是绝对的情况吗?

答案 1 :(得分:0)

我用它来解决它。这是link。对你有帮助。