加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

发布两个分页存储过程

发布时间:2020-12-12 15:59:46 所属栏目:MsSql教程 来源:网络整理
导读:两个存储过程的参数是一样的: [Basic_Pagination2005] :只能在SQLServer2005下用; [Basic_Pagination2000] :可在SQLServer2000和SQLServer2005下通用; 其中的参数说明在代码中已有注释。 需要注意的是当@IsReCount=1时,会返回记录总数。所以在.NET中需

两个存储过程的参数是一样的:
[Basic_Pagination2005]:只能在SQLServer2005下用;
[Basic_Pagination2000]:可在SQLServer2000和SQLServer2005下通用;
其中的参数说明在代码中已有注释。
需要注意的是当@IsReCount=1时,会返回记录总数。所以在.NET中需用DataSet存放记录集。
第一个Table是要查询的字段数据,第二个Table便是记录总数。
喜欢研究分页的朋友不妨一起讨论
1。Basic_Pagination2000

?

create ? PROCEDURE ? [ dbo ] . [ Basic_Pagination2000 ]

????
@tblName ?????? varchar ( 255 ),??? -- ?表名

???? @fidlelist ???? varchar ( 2000 ),?? -- 要查询字段

???? @fldName ?????? varchar ( 255 ),??? -- ?排序字段

???? @PageSize ????? int ,???????????? -- ?页尺寸

???? @PageIndex ???? int ,???????????? -- ?页码

???? @IsReCount ???? bit ,???????????? -- ?返回记录总数,?非?0?值则返回

???? @OrderType ???? bit ,???????????? -- ?设置排序类型,?非?0?值则降序

???? @strWhere ????? varchar ( 1000 )??? -- ?查询条件?(注意:?不要加?where)

AS

declare ? @strSQL ??? varchar ( 6000 )??????? -- ?主语句

declare ? @strTmp ??? varchar ( 100 ), @tmpwhere ?? varchar ( 200 ), @tmpwhere2 ? varchar ( 200 )???????? -- ?临时变量

declare ? @strOrder ? varchar ( 400 )???????? -- ?排序类型


if ? @OrderType ? != ? 0

begin

????
set ? @strTmp ? = ? ' <(select?min '

????
set ? @strOrder ? = ? ' ?order?by?[ ' ? + ? @fldName ? + ' ]?desc '

end

else

begin

????
set ? @strTmp ? = ? ' >(select?max '

????
set ? @strOrder ? = ? ' ?order?by?[ ' ? + ? @fldName ? + ' ]?asc '

end

set ? @tmpwhere = '' ;

set ? @tmpwhere2 = '' ;

if ( @strWhere != '' )

begin

???
set ? @tmpwhere = ' ??and?? ' + @strWhere ;

???
set ? @tmpwhere2 = ? ' ?where? ' ? + @strWhere ;

end

if ? @PageIndex ? = ? 1

begin

????
set ? @strSQL ? = ? ' select?top? ' ? + ? str ( @PageSize )? + ' ? ' + @fidlelist + ' ? ' + ' from?[ '

????????
+ ? @tblName ? + ? ' ]? ' ? + ? @tmpwhere2 ? + ? ' ? ' ? + ? @strOrder

end

else

begin

set ? @strSQL ? = ? ' select?top? ' ? + ? str ( @PageSize )? + ? ' ? ' + @fidlelist + ' ? ' + ' from?[ '

????
+ ? @tblName ? + ? ' ]?where?[ ' ? + ? @fldName ? + ? ' ] ' ? + ? @strTmp ? + ? ' ([ '

????
+ ? @fldName ? + ? ' ])?from?(select?top? ' ? + ? str (( @PageIndex - 1 ) * @PageSize )? + ? ' ?[ '

????
+ ? @fldName ? + ? ' ]?from?[ ' ? + ? @tblName ? + ? ' ]? ' ? + ? @tmpwhere2 ? + ? ' ? '

????
+ ? @strOrder ? + ? ' )?as?tblTmp)??? ' ? + ? @tmpwhere ? + ? ' ? ' ? + ? @strOrder

end

print ? @strSQL

exec ( @strSQL )

if ? @IsReCount ? != ? 0

????
begin

????
set ? @strSQL ? = ? ' select?count(*)?as?Total?from?? ' ? + ? @tblName ? + ? ' ?? ' + ? @tmpwhere2

????
exec ?( @strSQL )

???
end


2。Basic_Pagination2005

ALTER ? PROCEDURE ? [ dbo ] . [ Basic_Pagination2005 ]

??
@tblName ?????? nvarchar ( 200 ),????? -- 表名

?? @fidlelist ???? nvarchar ( 1000 ),??? -- 要查询字段

?? @fldName ?????? nvarchar ( 100 ),???? -- 排序字段

?? @PageSize ????? int ,?????????????? -- 页尺寸

?? @PageIndex ???? int ,?????????????? -- 页码

?? @IsReCount ???? bit ?,????????????? -- ?返回记录总数,?非?0?值则返回

?? @OrderType ???? bit ,?????????????? -- ?设置排序类型,?非?0?值则降序

?? @strWhere ? nvarchar ( 1000 )???????? -- 查询条件

AS

??
declare ? @sqlstr ? nvarchar ( 4000 ), @tmpwhere ? nvarchar ( 4000 ), @tmporder ? nvarchar ( 100 )

BEGIN

????
if ? @OrderType ? != ? 0

????
begin

????????
set ? @tmporder ? = ? @fldName ? + ' ?desc? '

????
end

????
else

????
begin

????????
set ? @tmporder ? = ? @fldName ? + ' ?asc? '

????
end

????
set ? @tmpwhere = '' ;

????
if ( @strWhere != '' )

????
begin

???????
set ? @tmpwhere = ' ?where? ' + @strWhere ;

????
end

????
set ? @sqlstr = N ' select?*?from(select?? ' + @fidlelist + ' ,?ROW_NUMBER()?OVER(order?by? ' + @tmporder + ' )?as?row?from? ' + @tblName + @tmpwhere + ' )?tmp?where?row?between? ' + cast ((( @PageIndex - 1 ) * @PageSize + 1 )? as ? nvarchar ) + ' ?and? ' + cast ( @PageIndex * @PageSize ? as ? nvarchar );??

????
exec ?sp_executesql? @sqlstr

????
if ? @IsReCount ? != ? 0

????
begin

??????
set ? @sqlstr = N ' select?count(*)?as?Total?from? ' + ? @tblName + @tmpwhere

??????
exec ?sp_executesql? @sqlstr ????

????
end

END

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读