zoukankan      html  css  js  c++  java
  • SQL SERVER 通用分页存储过程,两种用法任你选

    写在前面

            从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和我沟通,他们使用jQuery.DataTable.js插件,而且经过了公司底层的封装,pageIndex需要变动一下,变成pageIndex*pageSize来传。 也就是说按每页显示30条算,第一次传0,第二次传30这样来计算,我也是醉了。

    1、传pageIndex和pageSize

    CREATE PROC [dbo].[Common_PageList]
    (
    @tab nvarchar(max),---表名
    @strFld nvarchar(max), --字段字符串
    @strWhere varchar(max), --where条件 
    @PageIndex int, --页码
    @PageSize int, --每页容纳的记录数
    @Sort VARCHAR(255), --排序字段及规则,不用加order by
    @IsGetCount bit  --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
    )
    AS
    declare @strSql nvarchar(max)
    set nocount on;
    if(@IsGetCount = 1)
    begin
     set @strSql='SELECT COUNT(0) FROM ' + @tab + ' WHERE ' + @strWhere
    end
    else
    begin
      set @strSql=' SELECT * FROM (SELECT ROW_NUMBER() 
      OVER(ORDER BY ' + @Sort + ') AS rownum, ' + @strFld + ' FROM ' + @tab + ' where ' + @strWhere + ') AS Dwhere
      WHERE rownum BETWEEN ' + CAST(((@PageIndex-1)*@PageSize + 1) as nvarchar(20)) + ' and ' + cast((@PageIndex*@PageSize) as nvarchar(20))
    end
    
    exec (@strSql)
    
    set nocount off;

    2、传pageIndex*pageSize和pageSize

    CREATE PROC [dbo].[Common_PageList2]
    (
    @tab nvarchar(max),---表名
    @strFld nvarchar(max), --字段字符串
    @strWhere varchar(max), --where条件 
    @StartIndex int, -- 开始行数
    @PageSize int, --每页容纳的记录数
    @Sort VARCHAR(255), --排序字段及规则,不用加order by
    @IsGetCount bit  --是否得到记录总数,1为得到记录总数,0为不得到记录总数,返回记录集
    )
    AS
    DECLARE @strSql NVARCHAR(max)
    SET NOCOUNT ON;
    IF(@IsGetCount = 1)
    BEGIN
     SET @strSql='SELECT COUNT(0) FROM ' + @tab + ' WHERE ' + @strWhere
    END
    ELSE
    BEGIN
      DECLARE @ENDINDEX INT
      IF(@StartIndex>0)
        BEGIN
          SET @ENDINDEX=@StartIndex+@PageSize
          SET @StartIndex=@StartIndex+1
        END
      ELSE
        SET @ENDINDEX=@StartIndex+@PageSize
         
        SET @strSql=' SELECT * FROM (SELECT ROW_NUMBER() 
      OVER(ORDER BY ' + @Sort + ') AS rownum, ' + @strFld + ' FROM ' + @tab + ' where ' + @strWhere + ') AS Dwhere
      WHERE rownum BETWEEN ' + CAST(@StartIndex AS VARCHAR(30)) + ' and ' + CAST(@ENDINDEX AS VARCHAR(30))
    end
    
    exec (@strSql)
    
    SET NOCOUNT OFF;
  • 相关阅读:
    Angular1.0
    当今流行的 React.js 适用于怎样的 Web App?
    bower的权限问题
    淡定啊淡定
    JBoss for luna
    JQuery的二维码插件
    今天学人家玩云主机
    laravel5.2/laravel5.3入门指南 Windows 上快速安装并运行 Laravel 5.x
    验证mySqli扩展是否
    Amazon EC2 的名词解释
  • 原文地址:https://www.cnblogs.com/sword-successful/p/4834309.html
Copyright © 2011-2022 走看看