分类:
2008-07-08 23:53:24
可以随意定义排序语句的千万数量级分页显示存储过程
1.速度空前快,超过目前知道的大部分分页存储过程,一千万条数据平均不到100MS;
2.效率高,最后一页与第一页速度几乎持平;
3.可以随意定制查询条件;
4.可以随意定义排序语句;
5.可以随意定义分组语句。
6.欢迎试用,有什么心得请 Mail:xzhijun@GMail.com
7.演示地址:
CREATE PROCEDURE CN5135_SP_Pagination
/*
***************************************************************
**
中国无忧商务网千万数量级分页存储过程
**
***************************************************************
参数说明:
1.Tables
:表名称,视图
2.PrimaryKey
:主关键字
3.Sort
:排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc
4.CurrentPage
:当前页码
5.PageSize
:分页尺寸
6.Filter
:过滤语句,不带Where
7.Group
:Group语句,不带Group By
版权所有:中国无忧商务网()
欢迎试用,有什么心得请 Mail:xzhijun@GMail.com
示例代码:
***************************************************************/
(
@Tables varchar(1000),
@PrimaryKey varchar(100),
@Sort varchar(200) = NULL,
@CurrentPage int = 1,
@PageSize int = 10,
@Fields varchar(1000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL
)
AS
/*默认排序*/
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PrimaryKey
DECLARE @SortTable varchar(100)
DECLARE @SortName varchar(100)
DECLARE @strSortColumn varchar(200)
DECLARE @operator char(2)
DECLARE @type varchar(100)
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(50)
DECLARE @strStartRow varchar(50)
DECLARE @strFilter varchar(1000)
DECLARE @strSimpleFilter varchar(1000)
DECLARE @strGroup varchar(1000)
/*默认当前页*/
IF @CurrentPage < 1
SET @CurrentPage = 1
/*设置分页参数.*/
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS
varchar(50))