Sql server中mybatis分页提示 'ROWNUMBER' 不是可以识别的内置函数名称
2015-04-17 22:46
316 查看
Sql server中mybatis分页提示Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'ROWNUMBER' 不是可以识别的 内置函数名称
//////////////错误提示示例////////////////////////////////////////////////////////////////////////////
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'ROWNUMBER' 不是可以识别的 内置函数名称。
### The error may exist in org/loushang/train/user/dao/UserDao.xml
### The error may involve org.loushang.train.user.dao.UserDao.query-Inline
### The error occurred while setting parameters
### SQL: SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER() AS RN FROM ( select * from USER2 ) AS B ) AS A WHERE A.RN BETWEEN 1 AND 3
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'ROWNUMBER' 不是可以识别的 内置函数名称。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
原因分析:
这是因为分页时,没有指定排序依据,而(猜测)mybatis内置的sql拼接查询字符串也没有指定默认排序字段(这算是mybatis的一个bug吧),所以出现语法错误:
函数“row_number”必须有包含 ORDER BY 的 OVER 子句。
ROW_NUMBER() OVER( ) //错误:OVER子句不能为空。
ROW_NUMBER() OVER(order by user_id) //正确
另外一个错误:
mybatis中生成的分页语句是使用:ROWNUMBER() OVER() 这样的关键字,而sqlserver的内置函数是ROW_NUMBER(),而不是ROWNUMBER() 。
//以上测试基于:
Mybatis-3.2.1.jar
SqlServer2012
Eclipse JEE(LUNA)
Sqljdbc4.jar(也测试了Sqljdbc41.jar)
测试结果:
1.Mybatis+Sqlserver搭配:普通SELECT语句正常,使用分页时出错。
2.Mybatis+Oracle搭配:普通SELECT语句和分页语句都正常。
解决方法分析:
1.分页时手动指定排序字段。
2.Mybatis内置sqlserver分页时,对于未指定排序依据的,使用一种策略(比如按照第一个select的字段作为排序依据)指定分页依据。
//////////////错误提示示例////////////////////////////////////////////////////////////////////////////
### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'ROWNUMBER' 不是可以识别的 内置函数名称。
### The error may exist in org/loushang/train/user/dao/UserDao.xml
### The error may involve org.loushang.train.user.dao.UserDao.query-Inline
### The error occurred while setting parameters
### SQL: SELECT * FROM ( SELECT B.*, ROWNUMBER() OVER() AS RN FROM ( select * from USER2 ) AS B ) AS A WHERE A.RN BETWEEN 1 AND 3
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 'ROWNUMBER' 不是可以识别的 内置函数名称。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
原因分析:
这是因为分页时,没有指定排序依据,而(猜测)mybatis内置的sql拼接查询字符串也没有指定默认排序字段(这算是mybatis的一个bug吧),所以出现语法错误:
函数“row_number”必须有包含 ORDER BY 的 OVER 子句。
ROW_NUMBER() OVER( ) //错误:OVER子句不能为空。
ROW_NUMBER() OVER(order by user_id) //正确
另外一个错误:
mybatis中生成的分页语句是使用:ROWNUMBER() OVER() 这样的关键字,而sqlserver的内置函数是ROW_NUMBER(),而不是ROWNUMBER() 。
//以上测试基于:
Mybatis-3.2.1.jar
SqlServer2012
Eclipse JEE(LUNA)
Sqljdbc4.jar(也测试了Sqljdbc41.jar)
测试结果:
1.Mybatis+Sqlserver搭配:普通SELECT语句正常,使用分页时出错。
2.Mybatis+Oracle搭配:普通SELECT语句和分页语句都正常。
解决方法分析:
1.分页时手动指定排序字段。
2.Mybatis内置sqlserver分页时,对于未指定排序依据的,使用一种策略(比如按照第一个select的字段作为排序依据)指定分页依据。
相关文章推荐
- sql语句报错:“不是可以识别的内置函数名称”
- 'Now' 不是可以识别的 函数名。的错误!
- 自定义的sql函数报错“不是可以识别的内置函数名称
- 'OBJECT_SCHEMA_NAME' 不是可以识别的 内置函数名称。
- SQLserver不是可以识别的内置函数名称"的错误,通过set statistics time on能得到SQL语句的执行时间精确到毫秒.
- SQLserver不是可以识别的内置函数名称"的错误,通过set statistics time on能得到SQL语句的执行时间精确到毫秒.
- 利用Sql Server 2005的新函数ROW_NUMBER()写的高效分页存储过程
- Sql server 2005 利用row_number() 函数实现分页
- ROW_NUMBER()函数的使用 (利用可以轻松分页)
- Sql Server 2005 ROW_NUMBER 函数实现分页
- ASP.NET 数据分页第一篇—探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数
- 【转】ASP.NET 数据分页第一篇 - 探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数
- Sql Server 2005 ROW_NUMBER 函数实现分页
- sql Server 05中利用ROW_NUMBER() 函数分页
- Sql Server 2005 ROW_NUMBER 函数实现分页
- Sql Server 2005 ROW_NUMBER 函数实现分页
- SQL Server 2005-2008 ROW_NUMBER() 分页函数效率
- sql server 2005的分页函数ROW_NUMBER
- SQL Server 2005 技术内幕 TSQL查询学习笔记chapter4之三排名函数Row_number()和分页应用
- Sql Server 2005 ROW_NUMBER 函数实现分页