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
存储过程实现分页
最新推荐文章于 2020-11-20 12:30:37 发布