`

千万数量级分页存储过程(可支持多表查询,任意排序),就找了这一个实用的,来自网上

阅读更多

千万数量级分页存储过程(可支持多表查询,任意排序)

功能不错的分页存储过程,可支持多表查询,任意排序

CreatePROCEDUREusp_PagingLarge
@TableNamesVARCHAR(200),--表名,可以是多个表,但不能用别名
@PrimaryKeyVARCHAR(100),--主键,可以为空,但@Order为空时该值不能为空
@FieldsVARCHAR(200),--要取出的字段,可以是多个表的字段,可以为空,为空表示select*
@PageSizeINT,--每页记录数
@CurrentPageINT,--当前页,0表示第1页
@FilterVARCHAR(200)='',--条件,可以为空,不用填where
@GroupVARCHAR(200)='',--分组依据,可以为空,不用填groupby
@OrderVARCHAR(200)=''--排序,可以为空,为空默认按主键升序排列,不用填orderby
AS
BEGIN
DECLARE@SortColumnVARCHAR(200)
DECLARE@OperatorCHAR(2)
DECLARE@SortTableVARCHAR(200)
DECLARE@SortNameVARCHAR(200)
IF@Fields=''
SET@Fields='*'
IF@Filter=''
SET@Filter='Where1=1'
ELSE
SET@Filter='Where'+@Filter
IF@Group<>''
SET@Group='GROUPBY'+@Group

IF@Order<>''
BEGIN
DECLARE@pos1INT,@pos2INT
SET@Order=REPLACE(REPLACE(@Order,'asc','ASC'),'desc','DESC')
IFCHARINDEX('DESC',@Order)>0
IFCHARINDEX('ASC',@Order)>0
BEGIN
IFCHARINDEX('DESC',@Order)<CHARINDEX('ASC',@Order)
SET@Operator='<='
ELSE
SET@Operator='>='
END
ELSE
SET@Operator='<='
ELSE
SET@Operator='>='
SET@SortColumn=REPLACE(REPLACE(REPLACE(@Order,'ASC',''),'DESC',''),'','')
SET@pos1=CHARINDEX(',',@SortColumn)
IF@pos1>0
SET@SortColumn=SUBSTRING(@SortColumn,1,@pos1-1)
SET@pos2=CHARINDEX('.',@SortColumn)
IF@pos2>0
BEGIN
SET@SortTable=SUBSTRING(@SortColumn,1,@pos2-1)
IF@pos1>0
SET@SortName=SUBSTRING(@SortColumn,@pos2+1,@pos1-@pos2-1)
ELSE
SET@SortName=SUBSTRING(@SortColumn,@pos2+1,LEN(@SortColumn)-@pos2)
END
ELSE
BEGIN
SET@SortTable=@TableNames
SET@SortName=@SortColumn
END
END
ELSE
BEGIN
SET@SortColumn=@PrimaryKey
SET@SortTable=@TableNames
SET@SortName=@SortColumn
SET@Order=@SortColumn
SET@Operator='>='
END

DECLARE@typevarchar(50)
DECLARE@precint
Select@type=t.name,@prec=c.prec
FROMsysobjectso
JOINsyscolumnscono.id=c.id
JOINsystypestonc.xusertype=t.xusertype
Whereo.name=@SortTableANDc.name=@SortName
IFCHARINDEX('char',@type)>0
SET@type=@type+'('+CAST(@precASvarchar)+')'

DECLARE@TopRowsINT
SET@TopRows=@PageSize*@CurrentPage+1
print@TopRows
print@Operator
EXEC('
DECLARE@SortColumnBegin'+@type+'
SETROWCOUNT'+@TopRows+'
Select@SortColumnBegin='+@SortColumn+'FROM'+@TableNames+''+@Filter+''+@Group+'orDERBY'+@Order+'
SETROWCOUNT'+@PageSize+'
Select'+@Fields+'FROM'+@TableNames+''+@Filter+'AND'+@SortColumn+''+@Operator+'@SortColumnBegin'+@Group+'orDERBY'+@Order+'
')
END

GO
--调用例子:

--1.单表/单排序
EXECusp_PagingLarge'bigtable','d_id','d_id,d_title,d_content,d_time',20,1,'','','d_iddesc'
--2.单表/多排序
EXECusp_PagingLarge'bigtable','d_id','*',20,0,'','','d_timeasc,d_iddesc'

--3.多表/单排序
EXECusp_PagingLarge'bigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_author.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_idasc'

--4.多表/多排序
EXECusp_PagingLarge'bigtableleftjoinbigtable_authoronbigtable.d_id=bigtable_author.BigTable_id','bigtable.d_id','bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author',20,0,'','','bigtable.d_timeasc,bigtable.d_iddesc'
分享到:
评论

相关推荐

    千万数量级分页存储过程,可支持多表查询,任意排序

    千万数量级分页存储过程,可支持多表查询,任意排序

    千万数量级分页存储过程_可支持多表查询_任意排序

    这是一个关于千万数量级分页存储过程_可支持多表查询_任意排序的存储过程处理源码

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    弹出多个窗口:页面打开时同时弹出多个窗口,每个窗口内显示一个广告条,弹出数量跟该广告位中的正常广告条数一致 循环弹出窗口:页面打开时同时弹出一个窗口,在同一窗口内循环显示广告位中的正常广告,这样,每...

    2009达内SQL学习笔记

    select:从一个或多个表中检索一个或多个数据列。包含信息:想选择什么表,从什么地方选择。必须要有From子句。(最常用) 当从多张表里查询的时候,会产生笛卡尔积;可用条件过滤它。 当两个表有相同字段时必须加...

    C#程序开发范例宝典(第2版).part13

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part08

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part02

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part12

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#.net_经典编程例子400个

    57 2.2 Button控件应用 58 实例053 在Button按钮中显示图标 58 2.3 ComboBox控件应用 59 实例054 将数据表中的字段添加到ComboBox控件 59 实例055 带查询功能的ComboBox控件 61 2.4 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

Global site tag (gtag.js) - Google Analytics