高效分页sql存储过程
我这里有一个存储过程,很长很长啊。
--别看他很长,但是效率很高。5000万条数据亲测。
--不知道你用什么变成语言。这里就不不写调用方法了。
CREATE proc newgetpage
(--默认分页主键为id
@tblName nvarchar(128), --表名称列表
@PageSize int=10, --页尺寸
@PageIndex int=1, --当前页
@fields nvarchar(4000)='*', --查询字段列表
@fldname nvarchar(50), --主键字段名
@fldorder bit=1, --主键排序方式,0asc,非零desc
@FirstfldName nvarchar(50)='', --主排序字段名,非主键,有重复值
@FirstfldOrder bit=1, --主字段排序方式
@SecondfldName nvarchar(50)='', --副排序字段名,非主键,有重复值
@SecondfldOrder bit=1, --副字段排序方式
@strWhere nvarchar(1000)='', --查询条件
@Iscount bit=0 --返回记录总数,非0则返回
)
as
declare @strsql nvarchar(4000) --主语句
declare @strtmp nvarchar(500) --临时变量
declare @strorder nvarchar(500) --总排序方式
declare @stropporder nvarchar(500) --总排序的反方式
declare @strorderfldlist nvarchar(500) --所有要排序的字段序列
declare @selectfld nvarchar(500) --选择主键page
declare @selectfirst nvarchar(500) --选择主排序page
declare @selectsecond nvarchar(500) --选择副排序page
/**/
declare @strwheretmp nvarchar(500) --临时where变量
if @strwhere!=''
set @strwheretmp=' where '
else
set @strwheretmp=''
/**/
set @strsql=''
set @strtmp=''
set @strorder=''
set @stropporder=''
set @strorderfldlist=''
set @selectfld=''
set @selectfirst=''
set @selectsecond=''
if @pagesize<1
set @pagesize=10
if @pageindex<1
set @pageindex=1
if @fields=''
set @fields='*'
if @FirstfldName=''
set @FirstfldName=''
if @SecondfldName=''
set @SecondfldName=''
--------------------------------bengin
----------总排序方式
if @fldorder!=0
begin
-----正排序
set @strorder=@fldname + ' desc '
if @secondfldname!=''
if @secondfldorder!=0
set @strorder=@secondfldname + ' desc,'+@strorder
else
set @strorder=@secondfldname + ' asc,'+@strorder
if @firstfldname!=''
if @firstfldorder!=0
set @strorder=@firstfldname + ' desc,'+@strorder
else
set @strorder=@firstfldname + ' asc,'+@strorder
-----反排序
set @stropporder=@fldname + ' asc '
if @secondfldname!=''
if @secondfldorder!=0
set @stropporder=@secondfldname + ' asc,'+@stropporder
else
set @stropporder=@secondfldname + ' desc,'+@stropporder
if @firstfldname!=''
if @firstfldorder!=0
set @stropporder=@firstfldname + ' asc,'+@stropporder
else
set @stropporder=@firstfldname + ' desc,'+@stropporder
end
else
相关新闻>>
- 发表评论
-
- 最新评论 更多>>