文章收藏了两款sql 分页存储过程代码,这二款存储过程是二款高效分页存储过程代码,如果你觉得自己写的语句不够,强的话,可以利用我们现成的高效分页存储过程实例代码。
文章收藏了两款sql 代码,这二款存储过程是二款高效分页存储过程代码,如果你觉得自己写的语句不够,强的话,可以利用我们现成的高效分页存储过程实例代码。
create procedure pages@tablenames varchar(200), –表名,可以是多个表,但不能用别名@primarykey varchar(100), –主键,可以为空,但@order为空时该值不能为空@fields varchar(800), –要取出的字段,可以是多个表的字段,可以为空,为空表示select *@pagesize int, –每页记录数@currentpage int, –当前页,0表示第1页@filter varchar(200) = ”, –条件,可以为空,不用填 where@order varchar(200) = ” –排序,可以为空,为空默认按主键升序排列,不用填 order byasbegindeclare @toprow varchar(12)declare @temppagesize varchar(12)if(len(@order)>0)beginset @order=’ order by ‘+@orderendelsebeginset @order=”endif (len(@filter)
实例代码二
alter procedure [dbo].[common_procedure_selectwithpage]
@sql varchar(5000),
@currentpageno int,
@pagesize int,
@totalnum int output
as
set nocount on
declare @sqlcmd varchar(5000)
—————————————— –查询数据
set @sqlcmd = ‘select * from (‘ + @sql + ‘) a where rowindex between ‘ + convert(varchar,(@currentpageno-1) * @pagesize + 1) + ‘ and ‘ + convert(varchar,@currentpageno * @pagesize)
exec(@sqlcmd) print (@sqlcmd)
—————————————— –求记录总数
if @totalnum = -1
begin
create table #temp1(num int)
insert into #temp1
exec(‘select count(*) from (‘ + @sql + ‘) a’)
select @totalnum=(select * from #temp1)
drop table #temp1
end用法很简单,但必须在传入的sql中使用row_number() over(…) as rowindex :
declare @sql varchar(5000)
declare @currentpageno int
declare @pagesize int
declare @totalnum intset @currentpageno = 100
set @pagesize = 10
set @totalnum = -1
set @sql = ‘ select *, row_number() over (order by 排序字段) as rowindex from 表名 a with (nolock) ‘exec [dbo].[common_procedure_selectwithpage] @sql,@currentpageno,@pagesize,@totalnum output
select @totalnum
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1836326.html