sql分页存储过程扩展

ALTER PROCEDURE [dbo].[Prc_GetPage]
    (
      @startIndex INT , -- 开始索引号 
      @endindex INT , -- 结束索引号 
      @tblName VARCHAR(1000) , -- 表名 
      @fldName VARCHAR(3000) , -- 显示字段名 
      @OrderfldName VARCHAR(255) , -- 排序字段名 
      @IsReCount BIT = 0 , -- 返回记录总数, 非 0 值则返回 
      @OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序 
      @strWhere VARCHAR(1000) = '' -- 查询条件 (注意: 不要加 where) 
    )
AS 
    DECLARE @strSQL VARCHAR(6000) -- 主语句 
    DECLARE @strTmp VARCHAR(100) -- 临时变量 
    DECLARE @strOrder VARCHAR(400) -- 排序类型 
    IF @OrderType != 0 
        BEGIN 
            SET @strOrder = 'Desc' 
        END 
    ELSE 
        BEGIN 
            SET @strOrder = 'Asc' 
        END 
    SET @strSQL = 'WITH orderList AS ( '
        + 'SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderfldName + ' '
        + @strOrder + ')AS Row, ' + @fldName + ' ' + 'from ' + @tblName 
    IF @strWhere != '' 
        SET @strSQL = @strSQL + ' where ' + @strWhere 
    SET @strSQL = @strSQL + ')' + 'SELECT * ' + 'FROM orderlist '
        + 'WHERE Row between ' + STR(@startIndex) + ' and ' + STR(@endIndex)
        + '' 
    PRINT @strSQL
    IF @IsReCount != 0 
        BEGIN 
            SET @strSQL = ' select count(1) as Total from [' + @tblName + ']' 
            IF @strWhere != '' 
                SET @strSQL = @strSQL + ' where ' + @strWhere 
        END
--print(@strSQL) 
    EXEC (@strSQL) 

 

ALTER PROCEDURE [dbo].[Prc_GetPagedReCordV2]
    (
      @startIndex INT , -- 开始索引号 
      @endindex INT , -- 结束索引号 
      @tblName VARCHAR(3000) , -- 表名 
      @fldName VARCHAR(255) , -- 显示字段名 
      @OrderfldName VARCHAR(255) , -- 排序字段名 
      @IsReCount BIT = 0 , -- 返回记录总数, 非 0 值则返回 
      @OrderType BIT = 0 , -- 设置排序类型, 非 0 值则降序 
      @strWhere VARCHAR(1000) = '' , -- 查询条件 (注意: 不要加 where) 
      @totalCount INT OUTPUT
    )
AS 
    DECLARE @strSQL NVARCHAR(4000) -- 主语句 
    DECLARE @strTmp VARCHAR(100) -- 临时变量 
    DECLARE @strOrder VARCHAR(400) -- 排序类型 
    IF @OrderType != 0 
        BEGIN 
            SET @strOrder = 'Desc' 
        END 
    ELSE 
        BEGIN 
            SET @strOrder = 'Asc' 
        END 

    IF @IsReCount != 0 
        BEGIN 
            SET @strSQL = ' select @total = count(1)  from ' + @tblName + ' ' 
    
            IF @strWhere != '' 
                SET @strSQL = @strSQL + ' where ' + @strWhere 
        END
    ELSE 
        BEGIN
            SET @strSQL = ' select @total = count(1)  from ' + @tblName + ' ' 
    
            IF @strWhere != '' 
                SET @strSQL = @strSQL + ' where ' + @strWhere 
        END 
    PRINT ( @strSQL )
--exec (@strSQL)
    EXECUTE sp_executesql @strSQL, N'@total int output', @totalCount OUTPUT ;
    SELECT  @totalCount


    SET @strSQL = 'WITH orderList AS ( '
        + 'SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderfldName + ' '
        + @strOrder + ')AS Row, ' + @fldName + ' ' + 'from ' + @tblName 
    IF @strWhere != '' 
        SET @strSQL = @strSQL + ' where ' + @strWhere 
    SET @strSQL = @strSQL + ')' + 'SELECT * ' + 'FROM orderlist '
        + 'WHERE Row between ' + STR(@startIndex) + ' and ' + STR(@endIndex)
        + '' 

    EXEC (@strSQL)

 

posted @ 2013-01-06 16:52  spandiv  阅读(137)  评论(0编辑  收藏  举报