从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程

     通用分页存储过程很实用,但毕竟不是全适用于一些环境,譬如我遇到过一种情况,需要先外链两个表,然后再关联几个表,总之参数传递很烦人,这里不细说了, 现在只谈实现查询后,怎么分页的简单技巧
1,建立用户函数
CREATE   function   F_xxxx(@ID  nvarchar(36),@Key nvarchar(36),......)
{
......//这里查询出你需要分页的所有数据,可以带参数来查询
}
建函数的目的是为了整合查询的数据,主要是可以带入参数,很方便.
注,函数中没有exec语句,不可以拼接SQL,不过可以调用存储过程.
2,建分页存储过程,具体框架和说明如下
/*080520  by [email protected]*/   
CREATE   PROCEDURE  dbo.SPCustomPaging
    (
    
@PageSize   int   = 15 -- 页面大小
     @PageNumber   int   = 1 -- 页码
     @传入到函数的参数1   nvarchar ( 36 ),  -- 传入到函数的参数,这里参数个数根据建的函数来决定
     @传入到函数的参数2   nvarchar ( 36 ),  -- 传入到函数的参数,这里参数个数根据建的函数来决定
     @StrWhere   nvarchar ( 2000 ) = '  AND 1=1 '  ,  -- 条件,注:传入的@StrWhere需要replace.(''','''')处理
     @RecordCount   int   = 0   output   -- 返回总的条数
    )
AS
DECLARE   @strStartRow   int
IF   @PageNumber   <   1
    
SET   @PageNumber   =   1
SET   @strStartRow   = ( @PageNumber   -   1 ) *   @PageSize   +   1    -- 设置其实页码
--
--
DECLARE   @str_Count_SQL   nvarchar ( 500
SET   @str_Count_SQL =   ' SELECT @TotalCount=count(*) FROM  [F_建立的的函数]( ''' + @函数参数1 + ''' , ''' + @函数参数2 + ''' ) Where 1=1  '    +   @StrWhere    -- 1=1,用于外接条件
EXEC  sp_executesql  @str_Count_SQL ,N ' @TotalCount int=0 output ' , @RecordCount  output   -- 获取总的条数
Declare   @Sql   nvarchar ( 1000 )
set   @Sql   =
' DECLARE  @SortColumn  nvarchar(255)  --建几个临时变量
DECLARE  @SortNullValue  nvarchar(255) 
DECLARE  @PKStartValue  nvarchar(255)  
SET @SortNullValue = CAST(
''''  as int)
SET ROWCOUNT  
' +    cast ( @strStartRow     as    nvarchar ( 5 ))   + '    --整数转为字符
SELECT @SortColumn= isNull([函数中的分类字段] ,@SortNullValue), @PKStartValue = [函数中的关键字段]    FROM   [F_建立的的函数](
''' + @函数参数1 + ''' , ''' + @函数参数2 + ''' )   Where 1=1    ' + @StrWhere   + '   ORDER BY [函数中的分类字段], [再加个函数中的关键字段] Desc 
SET ROWCOUNT   
' +   cast ( @PageSize     as    nvarchar ( 5 ))  + '     --整数转为字符
SELECT * FROM  F_ManufacturerDiscount(
''' + @OrgID + '''
 WHERE  (isNull([函数中的分类字段],@SortNullValue)>@SortColumn or (isNull([函数中的分类字段],@SortNullValue)=@SortColumn and [函数中的关键字段]<=@PKStartValue))  
' + @StrWhere   + '   ORDER BY [函数中的分类字段],[函数中的关键字段] Desc
RETURN
'
Exec  ( @Sql )
GO

你可能感兴趣的:(count)