存儲過程分頁

3 篇文章 0 订阅

create  procedure TurnPage
(
@ContainerNo varchar(16),
@isFilter smallint,
@PageSize int,
@CurrPage int,
@isCheck smallint,  --- check valid result
@ResultTotal int output,
@ResultSub int output,
@SortOrder varchar(10)
)
As
Begin
  declare  @topnum int,@previous int
  declare @ContPrefix varchar(6)
  Select  @ContPrefix=dbo.LLL_GetContainerPrefix(@ContainerNo)
  --select @PageSize = 30
  --select @CurrPage = 2
  declare @i int,@IDStr nvarchar(4000),@strSQL nvarchar(4000)
  --declare @strCountSQL nvarchar(1000)
  create table #wtemp(
   ContainerNo varchar(16) ,   
   BoxNo varchar(16),
   
   so varchar(80) NULL,
   PackageNo varchar(10) NULL,
   nw real NULL,
   gw real NULL,
   Contents varchar(120) NULL
  )    
  --print 'AAAAAAAAAA'
--  If(Left(@ContainerNo,1) = 'N' Or Left(@ContainerNo,3) = 'LLC')
  If @ContPrefix='Nor' or @ContPrefix='LLC'
   Begin
     insert   #wtemp SELECT distinct ContainerNo,BoxNo,wo,PackageNo,nw,gw,Contents  
     FROM ssItemNoBox Where ContainerNo = @ContainerNo order by BoxNo
   End
  Else
   Begin
     insert  #wtemp  SELECT distinct  ContainerNo,BoxNo,wo,PackageNo,nw,gw,Contents   
       FROM ssOtherItemNoBox Where ContainerNo = @ContainerNo  order by BoxNo
   End
  
  select @topnum = @CurrPage * @PageSize
  select @previous = (@CurrPage - 1) * @PageSize
  
  select @i = 0
  select @strSQL = N''
  select @strSQL = @strSQL + N' select top '+str(@topnum)+ ' @i = @i + 1 '
  select @strSQL = @strSQL + N',  @IdStr = '
  select @strSQL = @strSQL + N'case when @i > '+str(@previous)+' then  @IdStr + ltrim(rtrim(str(BoxNo))) +  '','' '
  select @strSQL = @strSQL + N'else N''''end '
  select @strSQL = @strSQL + N'from #wtemp '
  if(@isCheck = 1)
   begin
    --Print 'AAAAAAAAAAA'
    select @strSQL = ltrim(rtrim(@strSQL)) + N'  Where ((gw- nw >10) Or nw > gw Or gw >100 Or ( gw <> 0 And gw = nw )) '
    select @ResultSub = count(BoxNo) From #wtemp Where ((gw- nw >10) Or nw > gw Or gw >100 Or ( gw <> 0 And gw = nw ))
   end
  else
   begin
    if(@isFilter != 0)
     begin
      select @strSQL = ltrim(rtrim(@strSQL)) + N'  order by BoxNo asc '
      select @ResultSub = count(BoxNo) From #wtemp
     end
    else
     begin
      select @strSQL = ltrim(rtrim(@strSQL)) + N'  Where  (nw = 0 Or gw = 0)  order by BoxNo asc '
      select @ResultSub = count(BoxNo) From #wtemp Where  (nw = 0 Or gw = 0)
     end
   end
  Select @IdStr = N''
  --print @strSQL
  exec sp_executesql @strSQL,N'@i int,@IdStr varchar(4000) output',@i,@IdStr output
  if len(rtrim(ltrim(@IdStr))) > 0
  begin
   select @IdStr = left(@IdStr,len(@IdStr)-1)
  end
  --print @IdStr

  if(@IDStr != '')
   select @strSQL = 'select * from #wtemp as temp where BoxNo in ('+@IDStr+') Order by BoxNo '  + @SortOrder
  else
   select @strSQL = 'select * from #wtemp as temp Order by BoxNo '  + @SortOrder  --no any recorder
  --print @strSQL

  select @ResultTotal = count(BoxNo) from #wtemp
  --print @ResultTotal
  --print @ResultSub
  exec(@strSQL)
  --select top 2 * from #wtemp as temp where BoxNo in ('010001','010004') order by BoxNo   desc
  --select * from #wtemp as temp1
  --SELECT distinct  ContainerNo,BoxNo,so,PackageNo,nw,gw,Contents   FROM ssOtherItemNoBox as temp Where ContainerNo = @ContainerNo and (nw = 0 Or gw = 0) order by BoxNo
End

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值