源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

sqlserver 存储过程分页(按多条件排序)

  • 时间:2020-01-01 04:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:sqlserver 存储过程分页(按多条件排序)
[b]cs页面调用代码: [/b]
[url=test.aspx]<a href="test.aspx?page=<%=PageCurrent-1 %>">上一页</a> <% } if (PageCurrent != TotalPage) { %> <a href="test.aspx?page=<%=PageCurrent+1 %>">下一页</a> <a href="test.aspx?page=<%=TotalPage%>">末 页</a> <% } %> </div>
存储过程代码:
CREATE proc [dbo].[getRecordByPage] @TotalPage int output,--总页数 @RowsCount int output,--总条数 @PageSize int,--每页多少数据 @CurrentPage int,--当前页数 @SelectFields nvarchar(1000),--select 语句但是不包含select @IdField nvarchar(50),--主键列 @OrderField nvarchar(50),--排序字段,如果是多个字段,除最后一个字段外,后面都要加排序条件(asc/desc),不包含order by,最后一个排序字段不用加排序条件 @OrderType nvarchar(4),--1升序,0降序 @TableName nvarchar(200),--表名 @strWhere nvarchar(300)--条件 As Begin declare @RecordCount float declare @PageNum int --分页依据数 Declare @Compare nvarchar(50)--比较字段区分min或者max Declare @Compare1 nvarchar(2) --大于号“>” 或者小于号"<“ Declare @OrderSql nvarchar(10)--排序字段 declare @Sql nvarchar(4000) Declare @TemSql nvarchar(1000) Declare @nRd int declare @afterRows int declare @tempTableName nvarchar(10) if(@OrderType='1') Begin set @OrderSql=' asc' End Else Begin set @OrderSql= ' desc' End if(isnull(@strWhere, '')<>'') Set @strWhere = @strWhere if(@strWhere='') Set @strWhere=' 1=1 ' Set @TemSql='Select @RecordCount=Count(1) from '+@TableName +' where '+@strWhere exec sp_executesql @TemSql,N'@RecordCount float output',@RecordCount output Set @RowsCount=@RecordCount Set @TotalPage= ceiling(@RecordCount/@PageSize) if(@CurrentPage>@TotalPage) Set @CurrentPage=@TotalPage if(@CurrentPage<1) Set @CurrentPage=1 if(@PageSize<1) Set @PageSize=1 print(@RecordCount) if(@CurrentPage=1) Begin set Rowcount @PageSize set @Sql='select '+ @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' '+@OrderSql +','+@IdField +' asc' --print(@Sql) exec sp_executeSql @Sql End else if(@CurrentPage=@TotalPage) begin set @afterRows=@RowsCount-(@CurrentPage-1)*@PageSize set RowCount @afterRows if(@OrderType='1') begin set @OrderField=REPLACE(@OrderField,'asc','lai512343975')//这里用变量将asc和desc互换,哈哈,太神了 set @OrderField=REPLACE(@OrderField,'desc','asc') set @OrderField=REPLACE(@OrderField,'lai512343975','desc') set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' desc'+','+@IdField +' asc' end else begin set @OrderField=REPLACE(@OrderField,'desc','lai512343975') set @OrderField=REPLACE(@OrderField,'asc','desc') set @OrderField=REPLACE(@OrderField,'lai512343975','asc') set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' order by '+@OrderField +' asc ' +','+@IdField+ ' asc' print(@Sql) end --print(@Sql) exec sp_executeSql @Sql end else Begin set @nRd=@PageSize* (@CurrentPage-1) print(@nRd) set RowCount @PageSize set @Sql='select ' + @SelectFields +' from '+ @TableName +' where ' +@strWhere+' and '+@IdField + ' not in (select top '+ cast(@nRd as nvarchar(10))+' '+@IdField+' from '+@TableName+' where '+ @strWhere+' order by '+@OrderField +' '+@OrderSql+','+@IdField +' asc) ' + ' order by '+ @OrderField + ' ' +@OrderSql+','+@IdField +' asc' exec sp_executeSql @Sql --Print(@sql) End end GO
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部