ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQLServer 2005通用分页存储过程

SQLServer 2005通用分页存储过程

原创 Linux操作系统 作者:hxmflying 时间:2010-05-19 13:47:57 0 删除 编辑
转载:
http://space.itpub.net/16436858/viewspace-621852

通过SQLServer 2005之后新加入的ROW_NUMBER()函数进行分页:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->setANSI_NULLSON
setQUOTED_IDENTIFIERON
go

--=============================================
--
Author:
--
Description: <通用分页存储过程>
--
=============================================
CreatePROCEDURE[dbo].[ClientNewsPager]
@talbeNamevarchar(255)='',--表名
@getFieldsvarchar(1000)='*',--需要返回的列
@orderByvarchar(255)='',--排序的字段名
@PageSizeint=15,--页尺寸
@PageIndexint=1,--页码,从1开始
@doCountbit=0,--返回记录总数, 非 0 值则返回
@whereStrvarchar(1500)=''--查询条件 (注意: 不要加 where)
AS
BEGIN
declare@rowResultint

BeginTran
declare@strSQLvarchar(5000)
declare@startRowIndexint
declare@maximumRowsint
set@startRowIndex=(@PageIndex-1)*@PageSize
set@maximumRows=@startRowIndex+@PageSize

if(@doCount!=0)
begin
if@whereStr!=''
set@strSQL='select id from'+@talbeName+'where'+@whereStr
else
set@strSQL='select id from'+@talbeName
end
else
begin
if(@whereStr!='')
begin
set@strSQL='SELECT'+@getFields+'FROM (SELECT ROW_NUMBER() OVER (ORDER BY'+@orderBy+') AS RowsNum,'+@getFields+'FROM'+@talbeName+'where'+@whereStr+') AS TMP WHERE (RowsNum >'+str(@startRowIndex)+'AND RowsNum <='+str(@maximumRows)+')'
end
else
begin
set@strSQL='SELECT'+@getFields+'FROM (SELECT ROW_NUMBER() OVER (ORDER BY'+@orderBy+') AS RowsNum,'+@getFields+'FROM'+@talbeName+') AS TMP WHERE (RowsNum >'+str(@startRowIndex)+'AND RowsNum <='+str(@maximumRows)+')'
end
end
exec(@strSQL)
Set@rowResult=@@ROWCOUNT

If@@Error<>0
Begin
RollBackTran
Return-1
End
Else
Begin
CommitTran
Return@rowResult
End
END

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14019112/viewspace-663105/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-29

  • 博文量
    23
  • 访问量
    69717