一个比较实用的大数据量分页存储过程
程序员文章站
2022-04-16 09:43:57
create proc sp_publicturnpagewebsite( @tbname nvarchar(100)='', --...
create proc sp_publicturnpagewebsite(
@tbname nvarchar(100)='', --表名,如 pinyin
@pagesize int=10, --每页的记录数,默认为 10
@curpage int=1, --表示当前页 1
@keyfield nvarchar(100)='id', --关键字段名,默认为 id,该字段要求是表中的索引 或 无重复和不为空的字段
@keyascdesc nvarchar(4)='asc', --关键字的升、降序,默认为升序 asc , 降序为 desc
@fields nvarchar(500)='*', --所选择的列名,默认为全选
@condition nvarchar(200)='', --where 条件,默认为空
@order nvarchar(200)='' --排序条件,默认为空
) with encryption as
if @tbname = ''
begin
raiserror('请指定表名!',11,1)
return
end
if @pagesize <=0 or @curpage <0
begin
raiserror('当前页数和每页的记录数都必须大于零!',11,1)
return
end
if @keyascdesc = 'desc'
set @keyascdesc = '<'
else
set @keyascdesc = '>'
if @condition <> ''
set @condition = ' where ' + @condition
declare @sql nvarchar(2000)
set @sql = ''
if @curpage = 1
set @sql = @sql + 'select top ' + cast(@pagesize as nvarchar(20)) + ' ' + @fields + ' from ' + @tbname + @condition + ' ' + @order
else
begin
declare @itopnum int
set @itopnum = @pagesize * (@curpage - 1)
set @sql = @sql + 'declare @slastvalue nvarchar(100)' + char(13)
set @sql = @sql + 'select top ' + cast(@itopnum as nvarchar(20)) + ' @slastvalue=' + @keyfield + ' from ' + @tbname + @condition + ' ' + @order + char(13)
declare @condition2 nvarchar(200)
if @condition = ''
set @condition2 = ' where ' + @keyfield + @keyascdesc + '@slastvalue '
else
set @condition2 = ' and ' + @keyfield + @keyascdesc + '@slastvalue '
set @sql = @sql + 'select top ' + cast(@pagesize as nvarchar(20)) + ' ' + @fields + ' from ' + @tbname + @condition + @condition2 + @order
end
execute sp_executesql @sql
@tbname nvarchar(100)='', --表名,如 pinyin
@pagesize int=10, --每页的记录数,默认为 10
@curpage int=1, --表示当前页 1
@keyfield nvarchar(100)='id', --关键字段名,默认为 id,该字段要求是表中的索引 或 无重复和不为空的字段
@keyascdesc nvarchar(4)='asc', --关键字的升、降序,默认为升序 asc , 降序为 desc
@fields nvarchar(500)='*', --所选择的列名,默认为全选
@condition nvarchar(200)='', --where 条件,默认为空
@order nvarchar(200)='' --排序条件,默认为空
) with encryption as
if @tbname = ''
begin
raiserror('请指定表名!',11,1)
return
end
if @pagesize <=0 or @curpage <0
begin
raiserror('当前页数和每页的记录数都必须大于零!',11,1)
return
end
if @keyascdesc = 'desc'
set @keyascdesc = '<'
else
set @keyascdesc = '>'
if @condition <> ''
set @condition = ' where ' + @condition
declare @sql nvarchar(2000)
set @sql = ''
if @curpage = 1
set @sql = @sql + 'select top ' + cast(@pagesize as nvarchar(20)) + ' ' + @fields + ' from ' + @tbname + @condition + ' ' + @order
else
begin
declare @itopnum int
set @itopnum = @pagesize * (@curpage - 1)
set @sql = @sql + 'declare @slastvalue nvarchar(100)' + char(13)
set @sql = @sql + 'select top ' + cast(@itopnum as nvarchar(20)) + ' @slastvalue=' + @keyfield + ' from ' + @tbname + @condition + ' ' + @order + char(13)
declare @condition2 nvarchar(200)
if @condition = ''
set @condition2 = ' where ' + @keyfield + @keyascdesc + '@slastvalue '
else
set @condition2 = ' and ' + @keyfield + @keyascdesc + '@slastvalue '
set @sql = @sql + 'select top ' + cast(@pagesize as nvarchar(20)) + ' ' + @fields + ' from ' + @tbname + @condition + @condition2 + @order
end
execute sp_executesql @sql
下一篇: Apache Tomcat 整合