博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql分页存储过程
阅读量:5024 次
发布时间:2019-06-12

本文共 1836 字,大约阅读时间需要 6 分钟。

ALTER PROCEDURE [dbo].[P_SplitPagesQuery]

@TablesName NVARCHAR(MAX),--表名或视图名(只能传单一表名)

@PK NVARCHAR(MAX)='',--主键(可以为空!)

@StrSort NVARCHAR(MAX)='',--排序字段(按照这个字段对查询结果进行排序),不能为空 @SortType INT =0,--排序方式,默认为0(升序),1为降序

@StrWhere NVARCHAR(MAX)='',--查询条件(即sql语句中的where后面部分)

@Fields NVARCHAR(MAX)='*',--读取字段(呈现出来的字段)

@PageCurrent INT =1,--当前页码,默认为1

@PageSize INT =10,--页面大小,默认为10

@PageCount INT OUTPUT,--总页数(按照页面大小一共分了多少页)

@RecordCount INT OUTPUT--查询结果的总条数 AS /*     返回值说明:查询结果(表) */

DECLARE @SqlStr nvarchar(4000)

IF @StrWhere IS NOT NULL AND @StrWhere != ''   

  BEGIN     

      SET @StrWhere = ' WHERE ' + @StrWhere + ' '   

   END

ELSE   

     BEGIN      

           SET @StrWhere = ''   

      END

   BEGIN    IF @StrSort = ''      

                IF @PK  IS NOT NULL AND @PK!=''                

                   SET @StrSort = @PK   

                      IF @PageCurrent < 1      

                          SET @PageCurrent = 1     

                                 IF @SortType = 1 AND @StrSort!=''           

                                       SET @StrSort = @StrSort + ' DESC '   

                                 IF @SortType = 0 AND @StrSort!=''           

                                       SET @StrSort = @StrSort + ' ASC '

                      IF @PageCurrent = 1 --第一页提高性能       

                              BEGIN           

                                  SET @SqlStr = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM ' + @TablesName +               ' AS tb ' + @StrWhere  

                                           IF @StrSort!=''                            

                                             SET @SqlStr = @SqlStr + ' ORDER BY '+ @StrSort       

                                             END   

                                        ELSE   

                                         BEGIN      

                                         DECLARE @StartPos NVARCHAR(50)         

                                         DECLARE @EndPos NVARCHAR(50)         

                                         SET @StartPos = CONVERT(NVARCHAR(50),(@PageCurrent - 1) * @PageSize + 1)         

                                         SET @EndPos = CONVERT(NVARCHAR(50),@PageCurrent * @PageSize)         

                                         SET @SqlStr =  ' SELECT '+@Fields+ '   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@StrSort+') AS RowNum , tb.* '+'   FROM '+@TablesName+' AS tb '+@StrWhere+') AS D   WHERE RowNum BETWEEN '+@StartPos+' AND ' +@EndPos                 

  IF @StrSort!=''                            

SET @SqlStr = @SqlStr + ' ORDER BY '+ @StrSort      

 

                                   END

                               END

print @SqlStr EXEC(@SqlStr)

DECLARE @SqlCount NVARCHAR(4000)

SET @SqlCount = 'SELECT @RecordCount=COUNT(*),@PageCount=CEILING((COUNT(*)+0.0)/'   + CAST(@PageSize AS VARCHAR)+') FROM ' + @TablesName + @StrWhere

转载于:https://www.cnblogs.com/nxxshxf/p/5614221.html

你可能感兴趣的文章
Excel催化剂开源第42波-与金融大数据TuShare对接实现零门槛零代码获取数据
查看>>
bug记录_signalr执行$.connnection.testhub结果为空
查看>>
【转】常用的latex宏包
查看>>
[TMS320C674x] 一、GPIO认识
查看>>
酷狗的皮肤文件存放在哪
查看>>
iOS RunLoop简介
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
python selenium向<sapn>标签中写入内容
查看>>
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>