通用的分页存储过程

本文介绍了一个在 SQL Server 2000/2005 上实现高效分页查询的通用存储过程。该过程允许用户指定查询列、表、条件及排序方式,并能返回指定页的数据及总记录数。

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

<本blog内容全部原创,如有转载,请注明出处>

通用的分页存储过程,效率高。在SQL Server2000/2005上调试通过。

-- =============================================
--
 Author:  <Tracy>
--
 Create date: <2006-08-24>
--
 Description: <通用分页存储过程>
--
 =============================================
Create PROCEDURE [dbo].[spCommonPageData]
 
@Select NVARCHAR(500),   -- 要查询的列名,用逗号隔开(Select后面From前面的内容)
 @From NVARCHAR(200),   -- From后的内容
 @Where NVARCHAR(500= NULL-- Where后的内容
 @OrderBy NVARCHAR(100= NULL-- 排序字段
 @Key NVARCHAR(50),    -- 分页主键
 @Page INT,      -- 当前页 ***计数从1开始***
 @PageSize INT,     -- 每页大小
 @TotalCount INT OUTPUT,   -- 总记录数
 @Result TINYINT OUTPUT   -- 执行是否成功
AS
BEGIN
 
SET NOCOUNT ON;

 
Declare @Sql nVarchar(1000), @Sql2 NVARCHAR(500)

--Alter By Tracy.Chuang 2006-08-21更改分页算法,采用比较最大值的方法
 Set @Sql=
 
'Select Top '+Cast(@PageSize As
 
nVarchar(10))+' '+@Select+  ' From '+@From+  ' Where '+Case
 
IsNull(@Where,''When '' Then '' Else @Where+' And ' End+
 
@Key+' >( Select ISNULL(MAX('+@Key+'), 0) AS MaxID
    From (Select Top 
'+Cast(@PageSize*(@Page-1As Varchar(10))+' 
 
'+@Key+
       
' From '+@From+
       
Case IsNull(@Where,''When '' Then '' Else ' Where '+@Where End+
       
' Order By '+@Key+') As T)'+
 
' Order By '+@Key+Case IsNull(@OrderBy,''When '' Then '' Else
 
','+@OrderBy End

 
Exec(@Sql)

 
Set @Sql2='Select 1 As Count From '+@From+Case IsNull(@Where,''When
  
'' Then '' Else ' Where '+@Where End
 
Exec(@Sql2)
 
SET @TotalCount = @@ROWCOUNT
 
 
SET @Result = 0
END

转载于:https://www.cnblogs.com/Tracy-Chuang/archive/2006/10/16/530125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值