高效分页sql存储过程

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-02 02:17 点击:

我这里有一个存储过程,很长很长啊。
--别看他很长,但是效率很高。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
 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 如何将多个SQL查询统计结果一次显示出来
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • SQL小技巧系列 --- 行转列合并
      • sql server 列转行
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1