存储过程实现分页
2016-07-10 15:28
302 查看
CREATE PROCEDURE [dbo].[sp_page] @strTable VARCHAR(1000), --表名 @strColumn VARCHAR(100), --按该列来进行分页,多表链接的时候要填写表名、列名、排序方式(table:column [ASC | DESC]) @strColumn2 VARCHAR(100), --按该列来进行分页,只需要填写列名、排序方式(column [ASC | DESC]) @intOrder BIT, --排序,0-顺序,1-倒序 @strColumnlist VARCHAR(800), --要查询出的字段列表,*表示全部字段 @intPageSize INT, --每页记录数 @intPageNum INT, --指定页 @strWhere VARCHAR(800), --查询条件 @intPageCount INT OUTPUT --总页数 AS DECLARE @sql NVARCHAR(4000) --用于构造SQL语句 DECLARE @where1 VARCHAR(800) --构造条件语句 DECLARE @orderby1 VARCHAR(800) --构造条件语句 DECLARE @count INT --记录符合条件的总条数 IF @strWhere is null or rtrim(@strWhere)='' -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格 BEGIN --没有查询条件 SET @where1=' ' END ELSE BEGIN --有查询条件 SET @where1=' WHERE ('+@strWhere+') ' END SET @orderby1 = LOWER(@strColumn) IF CHARINDEX(',',@orderby1) <> 0 BEGIN IF CHARINDEX('desc', @orderby1) = 0 BEGIN SET @orderby1=REPLACE(@orderby1, 'asc', 'desc'); END ELSE BEGIN SET @orderby1=REPLACE(@orderby1, 'desc', 'asc'); END END SET @strColumn = ' ' + @strColumn + ' ' SET @strColumnlist = ' ' + @strColumnlist + ' ' --计算符合记录的总条数。 SET @sql='SELECT @count=COUNT(*) FROM ' + @strTable + @where1 EXEC sp_executesql @sql, N'@count int OUTPUT', @count OUTPUT --构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 ) --SET @sql='SELECT @intPageCount=CEILING((COUNT(*)+0.0)/' + CAST(@intPageSize AS varchar)+ ') FROM ' + @strTable + @where1 --执行SQL语句,计算总页数,并将其放入@intPageCount变量中 --EXEC sp_executesql @sql, N'@intPageCount int OUTPUT', @intPageCount OUTPUT set @intPageCount=CEILING ((@count+ 0.0) /@intPageSize) --如果@intOrder=1为倒序,@intOrder=0为升序 IF @intOrder=1 BEGIN SET @sql='SELECT TOP ' + CAST(@intPageSize AS varchar) + ' * FROM ( SELECT TOP ' + CAST(( @count - (@intPageSize * (@intPageNum - 1) ) ) AS varchar) + @strColumnlist +' FROM ' + @strtable + @where1 +'ORDER BY '+@orderby1+' DESC) T20070311 ORDER BY ' + @strColumn2 END ELSE BEGIN SET @sql='SELECT TOP ' + CAST(@intPageSize AS varchar) + ' * FROM ( SELECT TOP ' + CAST(( @count - (@intPageSize * (@intPageNum - 1) ) ) AS varchar) + @strColumnlist +' FROM ' + @strtable + @where1 +'ORDER BY '+@orderby1+' ) T20070311 ORDER BY ' + @strColumn2 + ' DESC' END --print @sql EXEC(@sql) GO
相关文章推荐
- MySQL存储过程
- more、less 和 most 的区别
- ASP程序与SQL存储过程结合使用详解
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- Oracle存储过程之数据库中获取数据实例
- 十万条Access数据表分页的两个解决方法
- MSSQL自身存储过程的一个注入漏洞
- SQL SERVER调用存储过程小结
- SQLServer 2005 列所有存储过程的语句
- SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
- SQL2005重新生成索引的的存储过程 sp_rebuild
- SQL Server存储过程的基础说明
- sqlserver存储过程语法详解
- MSSQL事务的存储过程
- SQL Server 存储过程解析
- sql server动态存储过程按日期保存数据示例
- SQL Server中数据行批量插入脚本的存储实现
- SQLserver 数据库危险存储过程删除与恢复方法
- SQL Server存储过程中使用表值作为输入参数示例
- Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环