通用分页存储过程 返回总记录数

 

***************************************************************
** 千万数量级分页存储过程,配合EXTJS中的GridPanel分页 **
***************************************************************
 
参数说明:
1.@tbName :表名称,视图,不带dbo.
2.@pkFiled :主关键字
3.@sortExp :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc (Desc Asc前必须加空格)
4.@start :每页起始行号,第一页是从0开始计算(ExtJs)
5.@limit :每页显示记录数
6.@fields: 字段名
7.@filter :过滤语句,不带Where
8.@group :Group语句,不带Group By
 
返回说明:
返回记录集,table[0]分页后的记录,table[1]当前数据源总记录数
 
测试语句:
Exec [spExtJsPager] @tbName = 'Roles',
      @pkFiled = 'RoleID',
      @start = 3,
      @limit = 3
 
***************************************************************/
ALTER PROCEDURE [dbo].[spExtJsPager]
(
@tbName varchar(1000),
@pkFiled varchar(100),
@sortExp varchar(200) = NULL,
@start int = 0,
@limit int = 20,
@fields varchar(1000) = '*',
@filter varchar(1000) = NULL,
@group varchar(1000) = NULL
)
AS
BEGIN
SET NOCOUNT ON
 
/*默认排序*/
SET @sortExp = RTRIM(LTRIM(@sortExp))
IF @sortExp IS NULL OR @sortExp = ''
   SET @sortExp = @pkFiled
 
DECLARE @sortTable varchar(100)
DECLARE @sortName varchar(100)
DECLARE @SQL varchar(4000)
 
/*设定排序语句.*/
DECLARE @strStartRow varchar(50),@strEndRow varchar(50)
DECLARE @strFilter varchar(1000)
DECLARE @strGroup varchar(1000)
 
/*默认当前页*/
IF @start < 0
   SET @start = 0
 
/*设置分页参数.*/
SET @strStartRow = CAST((@start + 1) AS varchar(50))
SET @strEndRow = CAST((@start + @limit) AS varchar(50))
 
/*筛选以及分组语句.*/
IF @filter IS NOT NULL AND @filter != ''
   BEGIN
    SET @strFilter = ' Where ' + @filter + ' '
   END
ELSE
   BEGIN
    SET @strFilter = ''
   END
 
IF @group IS NOT NULL AND @group != ''
   BEGIN
    SET @strGroup = ' GROUP BY ' + @group + ' '
   END
ELSE
   BEGIN
    SET @strGroup = ''
   END
 
/*执行查询语句*/
SET @SQL ='select * from (
     Select
      ROW_NUMBER() OVER(Order By '+@sortExp+') as SysRowNum,
      ' + @fields + '
     FROM ' + @tbName + @strFilter + @strGroup + '
    ) v
    where SysRowNum between '+@strStartRow+' and '+@strEndRow
 
SET @SQL = @SQL + 'select count('+@pkFiled+') from '+@tbName + @strFilter + @strGroup
EXEC (@SQL)
END
 
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
 
posted @ 2009-03-27 10:46  -飛天蟲  阅读(705)  评论(0编辑  收藏  举报