Active Record или NHibernate генерирует недопустимый Sql для подкачки на SqlQuery - PullRequest
1 голос
/ 04 февраля 2010

При применении подкачки (используя 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, maxresult = 40)
  • Точно такой же подход работает для HqlQuery, влияет только на SqlQuery.

Это относится к MS2005Dialect и MS2008Dialect ...

Кто-нибудь знает мою глупую проблему?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2010

Я использовал обходной путь для этого. Вот его ссылка . Может быть полезно для вас.

0 голосов
/ 04 февраля 2010

Ну, я нашел эту страницу Возможная ошибка SQL Server , которая, в отличие от заголовка, предполагает, что мне нужно написать ее в моем sql. Никаких проблем просто не обойтись, не потратив полдня на попытки.

Кто-нибудь может подтвердить, что это действительно так?

...