日期:2014-05-18  浏览次数:20669 次

请各位高手批批我修改的SqlServer2005的分页存储过程,有没漏洞?
/***   分页存储过程   ***/
ALTER   Procedure   [dbo].[SP_ExecPager]
(
      @TblName   varchar(255),   --   表名及表集合  
      @Fields   varchar(1000) =   '* '   ,   --   列名及字段集合
      @SortKey   varchar(255) =   'Id '   ,   --   排序的字段名
      @SortType   varchar(50) =   'ASC '   ,   --   排序类型
      @Orders   varchar(2000) =   ' '   ,   --   排序条件   (不要加   order   by)
      @Wheres   varchar(2000) =   ' '   ,   --   查询条件   (不要加   where)
      @PageSize   int =   10   ,   --   页长
      @PageIndex   int         =   1   ,   --   当前页
      @FldCount   int   output     --   记录总数
)

AS   Begin  
declare   @strSql   varchar(3600)           ---   声明临时sql语句变量    
declare   @MyTable   varchar(3600)         ---   引用表    

--   设置查询条件   --
If   @Wheres   != ' '   begin
    set   @Wheres   =   '   where   '+@Wheres  
end

--   设置排序条件   --
if   @Orders   !=   ' '   begin
      set   @Orders   =   '   order   by   '   +   @Orders
end

--   设置当前页的记录数   --
declare   @CurrFields   varchar(10)  
Set   @CurrFields   =   cast((@PageSize*@PageIndex)   as   varchar(50))

--   上一页的记录数   --
declare   @PrevFields   varchar(10)
set   @PrevFields   =   cast(((@PageIndex-1)*@PageSize)   as   varchar(50))

--   设置页长的引用   --
declare   @PSize   varchar(10)  
Set   @PSize   =   cast(@PageSize   as   varchar(50))


/*************   < < <   第1页   > > >   直接返回信息以及总记录数   ************/
IF   @PageIndex   =   1   Begin
      --   1   执行一个返回总记录数的存储过程,获取该条件下的记录总数
      exec   SP_GetFieldCount   @TblName,@Orders,@Wheres,@FldCount   output
      --   2   直接输出第一页记录
      set   @strSql   =   'select   top   '   +@PSize+   '   '   +   @Fields   +   '   from   '   +@TblName+   '   '   +   @Wheres   +   '   '   +   @Orders  
      exec(@strSql)
      return  
End

/*************   < < <   第2页以后   > > >   可能有问题   ??   ************/
Else   Begin
      Set   @MyTable= '(SELECT   Top   '+@CurrFields+ '   ROW_NUMBER()   OVER(ORDER   BY   '+@SortKey+ '   '+@SortType+ ')AS   RowId   , '   +   @Fields
                    &n