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

5 篇文章 0 订阅

         场景是一个后台的管理项目,突然要把数据库从oracle改成sqlserver,于是把表啊数据之类的,完全迁移到sqlserver之后,代码中的ibatis的写好的oracle的分页,在基于sqlsever数据库的系统上,不能运行,比如oracle里的dual表,rownum等,sqlserver里没有。

<select id="getLogList" resultClass="monitorLog" parameterClass="monitorLog"> 
		SELECT *
  			FROM (SELECT c.*, rownum r
       	 	  from (select
          			   LOG_ID            logID,
                       LOG_OPERTOR       logOpertor,
                       OPERTOR_TIME      opertorTime,
                       LOG_DESC          logDesc                      
                  from MONITOR_LOG a
                 WHERE 1 = 1                  
                 <isNotEmpty property = "dateStart" prepend = "and" >
                      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# 
                 </isNotEmpty>
                 <isNotEmpty property = "logOpertor" prepend = "and" >                 	  
                      a.LOG_OPERTOR =#logOpertor# 
                 </isNotEmpty>                                                    
                 order by OPERTOR_TIME desc) c)
 		where r &gt;= #startRow# 
 		AND rownum &lt;= #pageSize#

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

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

	<select id="getLogList" resultClass="monitorLog" parameterClass="monitorLog"> 
 	  SELECT TOP $pageSize$ 
 		 			   LOG_ID            logID,
                       LOG_OPERTOR       logOpertor,
                       OPERTOR_TIME      opertorTime,
                       LOG_DESC          logDesc                      
                  from MONITOR_LOG a
                 WHERE 1 = 1       
                 <isNotEmpty property = "dateStart" prepend = "and" >
                      CONVERT(varchar(100), a.OPERTOR_TIME, 23) &gt;=#dateStart# and CONVERT(varchar(100), a.OPERTOR_TIME, 23) &lt;=#dateEnd# 
                 </isNotEmpty>
                 <isNotEmpty property = "logOpertor" prepend = "and" >                 	  
                      a.LOG_OPERTOR =#logOpertor# 
                 </isNotEmpty>                                                    
			and LOG_ID>=(
		       select max(LOG_ID) from ( 
		              select top $startRow$ LOG_ID from MONITOR_LOG order by LOG_ID
		       ) as t
			) order by LOG_ID    
	</select>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值