码迷,mamicode.com
首页 > 数据库 > 详细

SQL SERVER 通用分页存储过程,两种用法任你选

时间:2015-09-24 10:40:59      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

写在前面

        从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;

 

SQL SERVER 通用分页存储过程,两种用法任你选

标签:

原文地址:http://www.cnblogs.com/sword-successful/p/4834309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!