基本信息
源码名称:千万级分页通用存储过程
源码大小:7.08KB
文件格式:.sql
开发语言:SQL
更新时间:2016-08-05
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
/************************************************************
* Author:Yutao
* Time: 2016/8/4 15:20:48
************************************************************/
/****************************************************************
*
* 千万数量级分页存储过程
*
* ***************************************************************
*
* 参数说明:
*
* 1.Tables :表名称,视图
* 2.PrimaryKey :主关键字段
* 3.Sort :排序(注:不带Order By。如:UserId Desc,UserName Asc)
* 4.CurrentPage : 当前页码
* 5.PageSize :分页尺寸
* 6.Filter :过滤语句(注:不带Where。)
* 7.Group :Group语句(注:不带Group By)
*
*
****************************************************************/
ALTER PROCEDURE [dbo].[SP_Pagination]
(
@Tables VARCHAR(2000),
@PrimaryKey VARCHAR(500),
@Sort VARCHAR(500) = NULL,
@CurrentPage INT = 1,
@PageSize INT = 10,
@Fields VARCHAR(2000) = '*',
@Filter VARCHAR(1000) = NULL,
@Group VARCHAR(1000) = NULL
)
AS
IF @Sort IS NULL
OR @Sort = ''
SET @Sort = @PrimaryKey
DECLARE @SortTable VARCHAR(1000)
DECLARE @SortName VARCHAR(1000)
DECLARE @strSortColumn VARCHAR(1000)
DECLARE @operator CHAR(2)
DECLARE @type VARCHAR(1000)
DECLARE @prec INT
IF CHARINDEX('DESC', @Sort) > 0
BEGIN
SET @strSortColumn = REPLACE(@Sort, 'DESC', '')
SET @operator = '<='
END
ELSE
BEGIN
IF CHARINDEX('ASC', @Sort) = 0
SET @strSortColumn = REPLACE(@Sort, 'ASC', '')
SET @operator = '>='
END
IF CHARINDEX('.', @strSortColumn) > 0
BEGIN
SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.', @strSortColumn))
SET @SortName = SUBSTRING(
@strSortColumn,
CHARINDEX('.', @strSortColumn) 1,
LEN(@strSortColumn)
)
END
ELSE
BEGIN
SET @SortTable = @Tables
SET @SortName = @strSortColumn
END
SELECT @type = t.name,
@prec = c.prec
FROM sysobjects o
JOIN syscolumns c
ON o.id = c.id
JOIN systypes t
ON c.xusertype = t.xusertype
WHERE o.name = @SortTable
AND c.name = @SortName
IF CHARINDEX('char', @type) > 0
SET @type = @type '(' CAST(@prec AS VARCHAR) ')'
DECLARE @strPageSize VARCHAR(500)
DECLARE @strStartRow VARCHAR(500)
DECLARE @strFilter VARCHAR(1000)
DECLARE @strSimpleFilter VARCHAR(1000)
DECLARE @strGroup VARCHAR(1000)
IF @CurrentPage < 1
SET @CurrentPage = 1
SET @strPageSize = CAST(@PageSize AS VARCHAR(500))
SET @strStartRow = CAST(((@CurrentPage - 1) * @PageSize 1) AS VARCHAR(500))
IF @Filter IS NOT NULL
AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' @Filter ' '
SET @strSimpleFilter = ' AND ' @Filter ' '
END
ELSE
BEGIN
SET @strSimpleFilter = ''
SET @strFilter = ''
END
IF @Group IS NOT NULL
AND @Group != ''
SET @strGroup = ' GROUP BY ' @Group ' '
ELSE
SET @strGroup = ''
EXEC ('DECLARE @SortColumn ' @type 'SET ROWCOUNT ' @strStartRow '
SELECT @SortColumn=' @strSortColumn ' FROM ' @Tables @strFilter ' ' @strGroup ' ORDER BY ' @Sort '
SET ROWCOUNT ' @strPageSize '
SELECT ' @Fields ' FROM ' @Tables ' WHERE ' @strSortColumn @operator ' @SortColumn ' @strSimpleFilter ' ' @strGroup ' ORDER BY ' @Sort ''
)