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
以上就是本文的全部内容,希望对大家的学习有所帮助。