代码之家  ›  专栏  ›  技术社区  ›  penderi

活动记录或nhibernate生成的用于在sqlquery上分页的无效SQL

  •  1
  • penderi  · 技术社区  · 15 年前

    应用分页时(使用 SetFirstResult SetMaxResults ) 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,最大结果=40)
    • 同样的方法也适用于 HqlQuery ,只有 SQL查询 影响。

    这适用于MS2005对话和MS2008方言…

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

    2 回复  |  直到 14 年前
        1
  •  0
  •   penderi    15 年前

    我找到了这页 Possible SQL Server bug 与标题相反,这表明我需要在SQL中编写它。如果不花半天的时间去尝试,没问题。

    有人能肯定这是真的吗?

        2
  •  0
  •   Afshar Mohebi    14 年前

    我用了一份工作。这里它 link . 可能对你有帮助。

    推荐文章