SQL SERVER 2005分页存储过程

       看了很多的分页存储过程,感觉用起来还是没有自己亲自写的用起来感觉亲切,虽然写的比较烂,但是对这个方面的提高还是只有靠自己亲自动手才知道其中的微妙之处,哈哈!
CREATE PROCEDURE     [dbo].[TopPageList] 
    @strTable       varchar(200),   --表名 ("@strTable", "myUser");
    @strColumn      varchar(50),    --按该列来进行分页 ("@strColumn", "UserId"); 
    @strOrderColumn  varchar(50),    --排序字段order by XXX desc
    @intOrder     int,--排序的顺序 0 升序 1降序
    @strColumnlist  varchar(150)  , --要查询出的字段列表,*表示全部字段  cmd.Parameters.Add("@strColumnlist", "*");  
    @strWhere       varchar(800)='',  --查询条件 cmd.Parameters.Add("@strWhere", "");
    @intPageSize    int,           --每页记录数  cmd.Parameters.Add("@intPageSize", 15);
    @intPageNum     int,           --指定页  cmd.Parameters.Add("@intPageNum", 5);
  --  @intPageCount   int   OUTPUT  , --总页数  SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
   -- paramPageCount.Direction = ParameterDirection.Output;
    @itemCount      int   OUTPUT 
--   @doCount bit = 0, -- 返回, 非值则返回记录总数
  AS
--设置相应的空格
 
--设置DESC ASC
  if @intOrder=0  --0升序
     set @strOrderColumn=' order by '+@strOrderColumn
  else            --降序
     set @strOrderColumn=' order by '+@strOrderColumn +' desc '
 
  DECLARE   @sql    nvarchar(2000) --用于构造SQL语句
  DECLARE   @where1 varchar(800)   --构造条件语句
  DECLARE   @where2 varchar(800)   --构造条件语句
  IF   @strWhere   is   null   or   rtrim(@strWhere)=''  
  -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格
  BEGIN  --没有查询条件 
      SET   @where1=' WHERE '  
      SET   @where2=' '  
  END  
  ELSE  
  BEGIN  --有查询条件 
      SET   @where1=' WHERE  ('+@strWhere+')  AND  '
      SET   @where2=' WHERE  ('+@strWhere+')  '  
  END
  ------构造SQL语句,计算总页数。计算公式为总页数= Ceiling ( 记录个数/ 页大小)
   --计算总项数
  SET   @sql='SELECT   @itemCount=COUNT('+@strColumn+')  from   '+@strTable +@where2 
print(@sql)
  EXEC sp_executesql  @sql,N'@itemCount  int   OUTPUT',@itemCount   OUTPUT
   --   1:直接计算    2:自己写个分页控件里面设置一下也可以~!
 -- set @intPageCount  =floor(cast(@itemCount as float)/@intPageSize)
  --   if @intPageCount   --   set @intPageCount =@intPageCount +1
-- 
 
  
  --执行SQL语句,计算总页数,并将其放入@intPageCount变量中
 
  --将总页数放到查询返回记录集的第一个字段前,此语句可省略
  SET  @strColumnlist=' '+ Cast(@itemCount as varchar(30)) + ' as itemCount,' +' '+ @strColumnlist  
 --+ Cast(@intPageCount as varchar(30)) + ' as PageCount,'
  SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar)  +  @strColumnlist +  
                ' FROM ' + @strTable + @where1 + '  '+
                @strColumn + ' not in  '+  
                '  (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1)  AS  varchar) + ' ' +
                @strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+')  ' + @strOrderColumn 
  print(@sql)
 
--ELSE
--     begin   --构造降序的SQL ---针对2个表的时候会出现聚合函数的异常--适合单个表格的数据库分页操作
 --     SET @sql='SELECT TOP '+ CAST(@intPageSize   AS   varchar)  +  @strColumnlist +  
 --               ' FROM ' + @strTable + @where1 + '  '+
  --              @strColumn + '<(SELECT MIN('+@strColumn+')  '+  
  --              ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1)  AS  varchar) + ' ' +
 --              @strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+')  as tblTmp)' + @strOrderColumn 
  --    print(@sql)
 --     end 
  IF   @intPageNum=1--第一页 
      SET   @sql='SELECT   TOP   '+CAST(@intPageSize   AS   varchar) + @strColumnlist + ' FROM '+@strTable+  
                 @where2+@strOrderColumn
  --END  
--PRINT   @sql  
print(@sql)
exec(@sql)


public static void BindingContent(string strTable, string strColumn, string strOrderColumn, int intOrder, string strColumnlist, string strWhere, IChangePageStored changePage)
        {
          
            SqlParameter[] paras=new SqlParameter[9];
            paras[0] = new SqlParameter("@strTable" ,SqlDbType.VarChar);
            paras[0].Value = strTable;
            paras[1] = new SqlParameter("@strColumn", SqlDbType.VarChar);
            paras[1].Value = strColumn;
            paras[2] = new SqlParameter("@strOrderColumn", SqlDbType.VarChar);
            paras[2].Value = strOrderColumn;
            paras[3] = new SqlParameter("@strColumnlist", SqlDbType.VarChar);
            paras[3].Value = strColumnlist;
            paras[4] = new SqlParameter("@intOrder", SqlDbType.Int);
            paras[4].Value = intOrder;
            paras[5] = new SqlParameter("@strWhere", SqlDbType.VarChar);
            paras[5].Value = strWhere;
            paras[6] = new SqlParameter("@intPageSize", SqlDbType.Int);
            paras[6].Value = changePage.PageSize;
            paras[7] = new SqlParameter("@intPageNum", SqlDbType.Int);
            paras[7].Value = changePage.CurrentPage  ;
         //   paras[8] = new SqlParameter("@intPageCount", SqlDbType.Int);
         //   paras[8].Direction = ParameterDirection.Output;
            paras[8] = new SqlParameter("@itemCount", SqlDbType.Int);
            paras[8].Direction = ParameterDirection.Output;
            DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "TopPageList", paras);
            
          /*  @intPageCount   int   OUTPUT  , --总页数  SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
   -- paramPageCount.Direction = ParameterDirection.Output;
   
                @strTable = N'zhq_in_content c  INNER JOIN zhp_in_columns  m ON c.columns_id=m.columns_id',
  @strColumn = N'c.content_id',
  @strOrderColumn = N'c.createdate',
  @intOrder = 1,
  @strColumnlist = N'*',
  @strWhere = N'c.status=0 AND c.del=0',
  @intPageSize = 20,
  @intPageNum =100,*/
            changePage.DataSource = ds.Tables[0].DefaultView;// 设置分页控件的数据
            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                changePage.RecordCount = int.Parse(ds.Tables[0].Rows[0]["itemCount"].ToString());
               // changePage.PageCount = int.Parse(ds.Tables[0].Rows[0]["PageCount"].ToString());
            }
            if (changePage.DataUI.GetType().BaseType.Name == "BaseDataList")
            {
                changePage.DataUI.DataSource = changePage.DataSource;//设置数据源控件的数据
                changePage.DataUI.DataBind();
              
            }

        }     

请使用浏览器的分享功能分享到微信等