您的位置:首页 > 数据库

SQLServer 2005通用分页存储过程

2010-01-06 09:07 501 查看
通过SQLServer 2005之后新加入的ROW_NUMBER()函数进行分页:

set

ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author: <Author,,Name>
-- Description: <通用分页存储过程>
-- =============================================
Create PROCEDURE [dbo].[ClientNewsPager]
@talbeName varchar(255)='', -- 表名
@getFields varchar(1000)='*', -- 需要返回的列
@orderBy varchar(255)='', -- 排序的字段名
@PageSize int=15, -- 页尺寸
@PageIndex int=1, -- 页码,从1开始
@doCount bit=0, -- 返回记录总数, 非 0 值则返回
@whereStr varchar(1500)='' -- 查询条件 (注意: 不要加 where)
AS
BEGIN
declare @rowResult int

Begin Tran
declare @strSQL varchar(5000)
declare @startRowIndex int
declare @maximumRows int
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
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @rowResult
End
END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: