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

项目从oracle迁移到sqlserver后,代码中分页的相对改动 编辑
   场景是一个后台的管理项目,突然要把数据库从oracle改成sqlserver,于是把表啊数据之类的,完全迁移到sqlserver之后,代码中的ibatis的写好的oracle的分页,在基于sqlsever数据库的系统上,不能运行,比如oracle里的dual表,rownum等,sqlserver里没有。
Xml代码
  1. <select id="getLogList" resultClass="monitorLog" parameterClass="monitorLog">   
  2.         SELECT *  
  3.             FROM (SELECT c.*, rownum r  
  4.               from (select  
  5.                        LOG_ID            logID,  
  6.                        LOG_OPERTOR       logOpertor,  
  7.                        OPERTOR_TIME      opertorTime,  
  8.                        LOG_DESC          logDesc                        
  9.                   from MONITOR_LOG a  
  10.                  WHERE 11 = 1                    
  11.                  <isNotEmpty property = "dateStart" prepend = "and" >  
  12.                       to_char(a.OPERTOR_TIME,'yyyy-MM-dd hh24:mi:ss') &gt;=#dateStart# and to_char(a.OPERTOR_TIME,'yyyy-MM-dd hh24:mi:ss') &lt;=#dateEnd#   
  13.                  </isNotEmpty>  
  14.                  <isNotEmpty property = "logOpertor" prepend = "and" >                        
  15.                       a.LOG_OPERTOR =#logOpertor#   
  16.                  </isNotEmpty>                                                      
  17.                  order by OPERTOR_TIME desc) c)  
  18.         where r &gt;= #startRow#   
  19.         AND rownum &lt;= #pageSize#  

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

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

Xml代码
  1. <select id="getLogList" resultClass="monitorLog" parameterClass="monitorLog">   
  2.       SELECT TOP $pageSize$   
  3.                        LOG_ID            logID,  
  4.                       LOG_OPERTOR       logOpertor,  
  5.                       OPERTOR_TIME      opertorTime,  
  6.                       LOG_DESC          logDesc                        
  7.                  from MONITOR_LOG a  
  8.                 WHERE 11 = 1         
  9.                 <isNotEmpty property = "dateStart" prepend = "and" >  
  10.                      CONVERT(varchar(100), a.OPERTOR_TIME, 23) &gt;=#dateStart# and CONVERT(varchar(100), a.OPERTOR_TIME, 23) &lt;=#dateEnd#   
  11.                 </isNotEmpty>  
  12.                 <isNotEmpty property = "logOpertor" prepend = "and" >                         
  13.                      a.LOG_OPERTOR =#logOpertor#   
  14.                 </isNotEmpty>                                                      
  15.         and LOG_ID>=(  
  16.            select max(LOG_ID) from (   
  17.                   select top $startRow$ LOG_ID from MONITOR_LOG order by LOG_ID  
  18.            ) as t  
  19.         ) order by LOG_ID      
  20. </select>