分页存储过程续 + 评论

转载 2006年05月20日 21:03:00

按照saucer(思归)提供的网址
I decided to use the RowCount method wherever possible.


CREATE PROCEDURE Paging_RowCount
(
@Tables varchar(1000),
@PK varchar(100),
@Sort varchar(200) = NULL,
@PageNumber int = 1,
@PageSize int = 10,
@Fields varchar(1000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL)
AS

/*Default Sorting*/
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PK

/*Find the @PK type*/
DECLARE @SortTable varchar(100)
DECLARE @SortName varchar(100)
DECLARE @strSortColumn varchar(200)
DECLARE @operator char(2)
DECLARE @type varchar(100)
DECLARE @prec int

/*Set sorting variables.*/
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)

/*Default Page Number*/
IF @PageNumber < 1
SET @PageNumber = 1

/*Set paging variables.*/
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))

/*Set filter & group variables.*/
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 = ''

/*Execute dynamic query*/
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 + '
'
)

GO
_______________________________________________________________

ALTER PROCEDURE dbo.TopicsOf
(
@pageIndexint = 1,
@pageSizeint = 20,
@titleidint,
@boardidint
)
AS

declare @Count int
declare @id int

--定位

set @Count = @pageSize * (@pageIndex -1) + 1
set rowcount @Count
select @id=[index] from topics where boardid = @boardid and titleid = @titleid order by [index]
--print @id


--返回记录
set rowcount @pageSize

select * from topics where [index] >= @id and boardid = @boardid and titleid = @titleid order by [index]

set rowcount 0

RETURN


引用jyk的帖子

这个过程好理解
原文地址信息
http://community.csdn.net/Expert/TopicView3.asp?id=4182510

翻动100万级的数据 —— 只需几十毫秒 之揭秘篇:有详细的说明,不要错过。
______________________________________________________

第一个存储过程,就是比大小那个,排序字段不可以有重复值,有重复值就比不出大小会得到错误的结果,但这种分页理论上速度最快

第二个和第三个存储过程粗看看好像是一种,也就是我现在最常用的,是正过来倒过来那种,重复值是没问题了,但联合查询,也就是多表查询时会有可能超时(这个我现在也没弄明白怎么回事)

我一般多表查询就用Not IN的方法,单表有重复就正过来反过来,对唯一字段就用第一种比大小的.还有一种游标的,那个效率太低,就8说了...

sql server 带输入输出参数的分页存储过程(效率最高)

create procedure proc_page_withtopmax ( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount in...
  • kingmax54212008
  • kingmax54212008
  • 2015年07月14日 11:34
  • 5737

通用分页存储过程的使用

看着同事写的通用分页存储过程觉得还不错,分享给大家 1、存储过程 USE [test] GO /****** Object:  StoredProcedure [dbo]....
  • f10_s
  • f10_s
  • 2013年09月10日 16:35
  • 1360

C#调用SQL Server分页存储过程

C#调用SQL Server分页存储过程
  • roy_88
  • roy_88
  • 2016年05月04日 22:26
  • 3691

分页-存储过程5种写法 sqlserver分页

分页-存储过程5种写法 sqlserver分页
  • u012726702
  • u012726702
  • 2016年07月03日 12:40
  • 528

wordpress 修改ajax评论分页

今天小松又大修改了今天的评论,主要是发现【留下脚印】 评论太多,导致页面拉的很长,用户看起来也不是很好,于是就想对评论做个分页 ①wordpress开启评论分页 评论分页的设置在后台【设置】-【讨论】...
  • a454213722
  • a454213722
  • 2016年03月07日 12:00
  • 506

Oracle使用存储过程分页

今天我要说的就是基于Oracle存储过程的一种简单的分页方式,首先就是页面前端发起对分页的请求,然后向Oracle存储过程中传入页面当前数,页面大小,查询的SQL语句,而存储过程返回来的则是数据总条数...
  • lingyiwin
  • lingyiwin
  • 2016年04月26日 17:31
  • 1658

Sql Server 分页存储过程

分页存储过程一: --/*-----存储过程 分页处理 孙伟 2005-03-28创建 -------*/ --/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 --...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015年01月23日 21:12
  • 3693

sqlServer分页存储过程的调用

现象: sqlServer的分页一直相对比较复杂。这里使用存储过程实现分页逻辑解决办法 1:action获取查询的条件,初始化每页显示的大小,page代表当前查看第几页,默认设置为第一页。rows...
  • hcwbr123
  • hcwbr123
  • 2017年04月28日 11:39
  • 583

SQL server 2008 分页存储过程

GO /****** Object: StoredProcedure [dbo].[T_GetPager] Script Date: 03/23/2015 14:35:01 ******/ S...
  • xundh
  • xundh
  • 2015年03月23日 14:36
  • 1192

MySql 分页存储过程

DELIMITER $$ #修改分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_M...
  • xxj_jing
  • xxj_jing
  • 2014年06月05日 12:55
  • 6202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分页存储过程续 + 评论
举报原因:
原因补充:

(最多只允许输入30个字)