MSSQL分页存储过程
类型:编程辅助大小:134KB语言:中文评分:3.3标签:立即下载SEt ANSI _ NULLS SEt QUOTED _ IDENTER ongo if存在(从系统对象中选择*其中name=' DATa Paging ')drop proc DataBagingOrcrate processing[dbo].[数据分页]@tblName varchar(255),-表名@strGetFields varchar(1000)='* ',-需要返回的列@fldName varchar(255)=',-关键字段名@PageSize int=10,-页尺寸,如果为0则表示返回所有行,不分页@PageIndex int=1,-页码@doCount INT OUTPUT,-返回记录总数,非0 值则返回@OrderType位=0,-设置排序类型,非0 值则降序@strWhere varchar(2000)=',-查询条件(注意: 不要加其中)@SortField varchar(500)='' -排序字段ASdeclare @strSQL varchar(8000) -主语句声明@strTmp varchar(110) -临时变量declare @strOrder varchar(400) -排序类型如果@doCount!=0beginif @strWhere!=' ' set @ str=N '从[' Convert(nvarchar(255),@tblName) N']用(nolock)选择@ doCount=count(*)'其中1=1 ' Convert(nvarchar(2000),@ strWhere)elseset @ str=N '从[' Convert(nvarchar(255),@ tblName)N ']中选择@ doCount=count(*),带(无锁定)'执行sp _ executesql @ str,N'@doCount INT输出',@以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况if len(@ sort field)0 beginif @ order type!=0 begin et @ strOrder=' order by ' @排序字段' desc '-如果@OrderType不是0,就执行降序,这句很重要!endelsbegin et @ Strorder=' order by ' @ sort field endendendelsbegin et @ Strorder=' endif @ page SiZe=0 beginif @ Strwhere!=' set @ STrsql=' select ' @ STrgetFields '从[' @ TBlname ']选择(无锁定),其中1=1 ' @ Strwhere ' ' @ Strorderelseset @ Strsql='从[' @ TBlname ']中选择' @ STrgetFields '(无锁)' @ Strorderend else beginif @ page index=1 beginif @ Strwhere!='' - 页数为1 ,条件不为空set @ STrsql=' select * from(select top(' convert(varchar(20),@ page size))')' @ STrgetFields ' from ' @ TBlname '其中1=1 ' @ strWhere ' order by ' @ fldName ')TB ' @ strorderesset @ strSQL=' select * from(select top(' convert(varchar(20,@ page size)'))')' @ strGetFields ' from ' @ tblName ' order by ' @ fldName ')TB ' @如果是第一页就执行以上代码,这样会加快执行速度elsebegin -以下代码赋予了@strSQL以真正执行的结构化查询语言代码如果@ Strwhere=' set @ Strsql=' select * from(选择top(' convert(varchar(20),@PageSize)') @strGetFields '来自' @tblName '其中1=1和@fldName '(选择max(@ Fldname ')自(选择top (' convert(varchar(20),@ page size *(page index-1))')' @ Fldname ' from ' @ TBlname ' order by ' @ Fldname ')T)order by ' @ Fldname ')TB ' @ Strordereleset @ Strsql=' select * from(选择top(' convert(varchar(20),PageSize)') @fldName '来自' @tblName '其中1=1 ' @ Strwhere ' order by ' @ Fldname ')T)' ' order by ' @ Fldname ')TB ' '其中1=1 ' @ Strwhere ' ' @ strOrder end print @ Strsql exec(@ Strsql)-exec数据分页' Sys _ User ',' *,' UserID ',5,2,1,1 ' ',' UserID' - -表名,所有列,主键,条数,页码,是否查总条数,升降序,条件、按某字段排序-选择*从(从视图_帐户中选择前30个*其中1=1和帐户sID(从(选择前30个帐户sID -从视图_帐户中选择1=1按帐户(同suddenionosphericdisturbance)电离层的突然骚扰排序)中选择最大值)T)按帐户(同suddenionosphericdisturbance)电离层的突然骚扰排序)TB -其中1=1按帐户(同suddenionosphericdisturbance)电离层的突然骚扰排序
版权声明:MSSQL分页存储过程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。