`

项目从oracle迁移到sqlserver后,代码中分页的相对改动 编辑

 
阅读更多
场景是一个后台的管理项目,突然要把数据库从oracle改成sqlserver,于是把表啊数据之类的,完全迁移到sqlserver之后,代码中的ibatis的写好的oracle的分页,在基于sqlsever数据库的系统上,不能运行,比如oracle里的dual表,rownum等,sqlserver里没有。
Xml代码
  1. <selectid="getLogList"resultClass="monitorLog"parameterClass="monitorLog">
  2. SELECT*
  3. FROM(SELECTc.*,rownumr
  4. from(select
  5. LOG_IDlogID,
  6. LOG_OPERTORlogOpertor,
  7. OPERTOR_TIMEopertorTime,
  8. LOG_DESClogDesc
  9. fromMONITOR_LOGa
  10. WHERE11=1
  11. <isNotEmptyproperty="dateStart"prepend="and">
  12. to_char(a.OPERTOR_TIME,'yyyy-MM-ddhh24:mi:ss')&gt;=#dateStart#andto_char(a.OPERTOR_TIME,'yyyy-MM-ddhh24:mi:ss')&lt;=#dateEnd#
  13. </isNotEmpty>
  14. <isNotEmptyproperty="logOpertor"prepend="and">
  15. a.LOG_OPERTOR=#logOpertor#
  16. </isNotEmpty>
  17. orderbyOPERTOR_TIMEdesc)c)
  18. wherer&gt;=#startRow#
  19. ANDrownum&lt;=#pageSize#

以上是oracle的下,根据rownum来分页的,startRow和pageSize分别是实体类中对应的字段,开始行和页大小。

迁移到sqlserver之后,因为startRow和pageSize已经定了,所以修改的话,也得基于这两个字段。修改代码如下:

Xml代码
  1. <selectid="getLogList"resultClass="monitorLog"parameterClass="monitorLog">
  2. SELECTTOP$pageSize$
  3. LOG_IDlogID,
  4. LOG_OPERTORlogOpertor,
  5. OPERTOR_TIMEopertorTime,
  6. LOG_DESClogDesc
  7. fromMONITOR_LOGa
  8. WHERE11=1
  9. <isNotEmptyproperty="dateStart"prepend="and">
  10. CONVERT(varchar(100),a.OPERTOR_TIME,23)&gt;=#dateStart#andCONVERT(varchar(100),a.OPERTOR_TIME,23)&lt;=#dateEnd#
  11. </isNotEmpty>
  12. <isNotEmptyproperty="logOpertor"prepend="and">
  13. a.LOG_OPERTOR=#logOpertor#
  14. </isNotEmpty>
  15. andLOG_ID>=(
  16. selectmax(LOG_ID)from(
  17. selecttop$startRow$LOG_IDfromMONITOR_LOGorderbyLOG_ID
  18. )ast
  19. )orderbyLOG_ID
  20. </select>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics