实现SQL分页的存储过程代码
程序员文章站
2023-11-22 13:32:46
sql分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单。
分享代码如下
use [sendmessage]
go
/****** object: s...
sql分页的存储过程代码,需要的朋友们直接拿去用,使用非常简单。
分享代码如下
use [sendmessage] go /****** object: storedprocedure [dbo].[pages] script date: 07/09/2015 13:46:50 ******/ set ansi_nulls on go set quoted_identifier on go alter proc [dbo].[pages] ( @tbname nvarchar(100), --要分页显示的表名 @fieldkey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段 @pagecurrent int=1, --要显示的页码 @pagesize int=10, --每页的大小(记录数) @fieldshow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段 @fieldorder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定desc/asc @wherestring nvarchar(1000)=n'' --查询条件 ) as begin if isnull(@fieldkey,n'')='' begin raiserror(n'分页处理需要主键(或者惟一键)',1,16) return end if isnull(@pagecurrent,0)<1 set @pagecurrent=1 if isnull(@pagesize,0)<1 set @pagesize=10 if isnull(@fieldshow,n'')=n'' set @fieldshow=n'*' if isnull(@fieldorder,n'')=n'' set @fieldorder=n'' else set @fieldorder=n'order by '+ltrim(@fieldorder) if isnull(@wherestring,n'')=n'' set @wherestring=n'' else set @wherestring=n'where '+@wherestring+n'' --计算分页显示的topn值 declare @topn varchar(20),@startrecord varchar(20),@endrecord varchar(20) select @topn=@pagesize, @startrecord=(@pagecurrent-1)*@pagesize+1, @endrecord=(@pagecurrent-1)*@pagesize+@pagesize --第一页直接显示 if @pagecurrent=1 exec(n'select top '+@topn +n' '+@fieldshow +n' from '+@tbname +n' '+@wherestring +n' '+@fieldorder) else exec(n'with temptbl as( select row_number() over('+@fieldorder+') as row, '+@fieldkey+' from '+@tbname+n' '+@wherestring+') select '+@fieldshow+' from (select b.* from (select '+@fieldkey+' from temptbl where row between '+@startrecord+' and '+@endrecord+')a left join '+@tbname+' b on a.'+@fieldkey+'=b.'+@fieldkey+')c') end
以上就是本文的全部内容,希望对大家的学习有所帮助。