实现SQL分页的存储过程代码

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

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐