SQLServer 2005通用分页存储过程

本文介绍了一种使用SQL Server 2005中ROW_NUMBER()函数实现通用分页查询的方法,并提供了一个存储过程示例,该过程允许用户指定表名、字段、排序方式等参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值