通用的分页存储过程

-- =============================================
-- Author:  <张婷婷>
-- 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-1) As 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
posted @ 2006-12-15 19:36  海浪~~  阅读(105)  评论(0编辑  收藏  举报