写在前面

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

最新文章

  1. 数据库SQL语句优化小结
  2. lintcode二叉树的锯齿形层次遍历 (双端队列)
  3. git add 命令
  4. Mysql导入导出非常慢解决办法
  5. ruby -- 基础学习(六)时间计算
  6. 重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片
  7. js之基本包装类型
  8. SharePoint Services 数据库表
  9. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)
  10. 详解boost库中的Message Queue .
  11. POJ 1759 Garland(二分+数学递归+坑精度)
  12. WindowsAPI一日一练
  13. ReactNative学习之Html基础
  14. hdu 5427(水)
  15. python sorted函数多条件排序是怎么回事
  16. @Autowired和@Resource注解的一个意外重要区别
  17. Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据
  18. 【XSY2759】coin DP 线性插值
  19. iPhone X 适配 ( iOS 11适配 )
  20. 学霸网站之NABC

热门文章

  1. VS上关于找不到程序集的问题
  2. 热门的PHP框架
  3. 免费SVN服务器笔记
  4. Lisk沙箱漏洞分析及解决方案
  5. SQLite 预写式日志
  6. 在.NET Core中遭遇循环依赖问题"A circular dependency was detected"
  7. XCode的个人使用经验
  8. Java ServletContextListener用法
  9. EF6 Power Tools的妙用和问题
  10. 【JQ+锚标记实现点击页面回到顶部】