2010-02-04 48 views
1

生成用於尋呼無效SQL時施加尋呼(使用SetFirstResultSetMaxResults)到ActiveRecordSqlQuery,與NHibernate 2.1.1 GA和ActiveRecord的2.0.1生成以下SQL:活動記錄或NHibernate的上SqlQuery類

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 ...

任何人都知道我的愚蠢的問題?

+0

你在做sql中的'select *'查詢嗎? – dotjoe

+0

沒有。所有領域都被提名。我也別名,它仍然會產生垃圾的SQL。我現在手動添加。不理想。 – penderi

+0

我也有同樣的問題 –

回答

0

嗯,我找到了這個頁面Possible SQL Server bug,這與標題相反,表明我需要將它寫入我的sql。沒有任何問題可以在沒有花費半天時間的情況下完成。

任何人都可以證實這是肯定的情況?

+0

我們雙倍選擇,但這是我們現在的解決方案。需要NH 3.0重新測試 – penderi

0

我使用了一個解決方法。這裏它的link。可能對你有幫助。