【发布时间】:2021-11-18 21:56:29
【问题描述】:
谁能解释一下为什么MsSql2012Dialect 上的NHibernate 会生成服务器无法处理的查询?当没有明确指定排序时,它会以这种方式构建查询。
...
ORDER BY CURRENT_TIMESTAMP
OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY
【问题讨论】:
-
当需要
PAGING时,它使用OFFSET子句。在这种情况下,它将按时间戳顺序选择前 10 行。你有某种分页,对吧? -
我找到了问题所在。我们的查询中有 SELECT DISTINCT 并且没有排序。因此,HNibernate 生成与 DISTINCT 冲突的默认 ORDER BY CURRENT_TIMESTAMP 。错误是 - 如果指定了 SELECT DISTINCT,则 ORDER BY 项目必须出现在选择列表中。
-
归根结底,如果您使用分页但没有提供实际的排序条件,那么使用它的函数也可以称为“选择 10 个随机行”,因为查询如图所示不保证它将返回哪些行。
标签: sql-server nhibernate pagination