Sql server中mybatis分页提示 'ROWNUMBER' 不是可以识别的内置函数名称

Sql servermybatis分页提示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的字段作为排序依据)指定分页依据。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值