欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-10-10 15:41:08
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

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