首页 / MYSQL / 两款sql分页存储过程代码
两款sql分页存储过程代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了两款sql分页存储过程代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3113字,纯文字阅读大概需要5分钟。
内容图文
![两款sql分页存储过程代码](/upload/InfoBanner/zyjiaocheng/544/5a3e58b229d9422684ae12380f95f106.jpg)
文章收藏了两款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 by
as
begin
declare @toprow varchar(12)
declare @temppagesize varchar(12)
if(len(@order)>0)
begin
set @order=' order by '+@order
end
else
begin
set @order=''
end
if (len(@filter)<1)
begin
set @filter=' 1=1'
end
if(@currentpage-1<=0)
set @currentpage=0
set @toprow= rtrim(ltrim(str(@pagesize*(@currentpage-1))))
set @temppagesize= rtrim(ltrim(str(@pagesize)))
exec('
declare @temptable table(rownum int identity(1,1),gid varchar(12))'+'
declare @datatable table(gid varchar(12))'+'
declare @timer datetime'+'
set @timer = getdate() '+'
set nocount on '+'
insert into @temptable(gid) select '+@primarykey+' from '+@tablenames+' where '+@filter+@order+'
insert into @datatable(gid) select top '+@temppagesize+'gid from @temptable where rownum>'+@toprow+'
set rowcount '+@temppagesize+'select '+@fields+' from '+@tablenames+' where '+@filter+' and '+@primarykey+' in (select gid from @datatable)'+@order+'
set rowcount 0'+'
print(datediff(millisecond, @timer, getdate()))')
print('insert into @temptable(gid) select '+@primarykey+' from '+@tablenames+' where '+@filter+@order)
print('select '+@fields+' from '+@tablenames+' where '+@filter+' and '+@primarykey+' in(select gid from @datatable) '+@order)
end
go
实例代码二
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
内容总结
以上是互联网集市为您收集整理的两款sql分页存储过程代码全部内容,希望文章能够帮你解决两款sql分页存储过程代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。