随笔 - 1330  文章 - 1  评论 - 376  0

ms sql存储过程


-- =============================================
--
 Create date: <2006-11-05>
--
 Description:    <高效分页存储过程,仅适用于Sql2005>
--
 Notes:        <排序字段强烈建议建索引>
--
 =============================================
create Procedure [dbo].[Page] 
 
@TableName varchar(50),        --表名
 @Fields varchar(1000= '*',    --字段名(全部字段为*)
 @OrderField varchar(1000),        --排序字段(必须!支持多字段)
 @sqlWhere varchar(1000= Null,--条件语句(不用加where)
 @pageSize int,                    --每页多少条记录
 @pageIndex int = 1 ,            --指定当前为第几页
 @TotalPage int output            --返回总页数
as
begin

    
Begin Tran --开始事务

    
Declare @sql nvarchar(4000);
    
Declare @totalRecord int;    

    
--计算总记录数
         
    
if (@SqlWhere='' or @sqlWhere=NULL)
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName
    
else
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

    
EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数       
    
    
--计算总数量
    select @TotalPage=@totalRecord--CEILING((@totalRecord+0.0)/@PageSize)+1

    
if (@SqlWhere='' or @sqlWhere=NULL)
        
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName 
    
else
        
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere    
        
    
    
--处理页数超出范围情况
    if @PageIndex<=0 
        
Set @pageIndex = 1
    
    
if @pageIndex>@TotalPage
        
Set @pageIndex = @TotalPage

     
--处理开始点和结束点
    Declare @StartRecord int
    
Declare @EndRecord int
    
    
set @StartRecord = (@pageIndex-1)*@PageSize + 1
    
set @EndRecord = @StartRecord + @pageSize - 1

    
--继续合成sql语句
    set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord+ ' and ' +  Convert(varchar(50),@EndRecord)
    
--print @Sql
    Exec(@Sql)

--    print @totalRecord 
    If @@Error <> 0
      
Begin
        
RollBack Tran
        
Return -1
      
End
     
Else
      
Begin
        
Commit Tran
        
--print @totalRecord 
        Return @totalRecord ---返回记录总数
        
        
      
End   
    
end

asp.net分页函数



 #region 获取分页的数据
        
/// <summary>
        
/// 获取分页的数据
        
/// </summary>
        
/// <param name="TblName">数据表名</param>
        
/// <param name="Fields">要读取的字段</param>
        
/// <param name="OrderField">排序字段</param>
        
/// <param name="SqlWhere">查询条件</param>
        
/// <param name="PageSize">每页显示多少条数据</param>
        
/// <param name="pageIndex">当前页码</param>
        
/// <param name="TotalPage">返回值,共有多少页</param>
        
/// <returns></returns>

        
public static DataSet PageData(string TblName, string Fields, string OrderField, string SqlWhere, int PageSize, int pageIndex, out int TotalPage)
        {
           
            TotalPage 
= 1;
            DbObject db 
= new DbObject();

            
string connString = db.ConnectionString;

            SqlConnection conn 
= new SqlConnection(connString);
            SqlCommand comm 
= new SqlCommand("Page", conn);

            comm.Parameters.Add(
new SqlParameter("@TableName", SqlDbType.NVarChar, 100));
            comm.Parameters[
0].Value = TblName;

            comm.Parameters.Add(
new SqlParameter("@Fields", SqlDbType.NVarChar, 1000));
            comm.Parameters[
1].Value = Fields;

            comm.Parameters.Add(
new SqlParameter("@OrderField", SqlDbType.NVarChar, 1000));
            comm.Parameters[
2].Value = OrderField;

            comm.Parameters.Add(
new SqlParameter("@sqlWhere", SqlDbType.NVarChar, 1000));
            comm.Parameters[
3].Value = SqlWhere;

            comm.Parameters.Add(
new SqlParameter("@pageSize", SqlDbType.Int));
            comm.Parameters[
4].Value = PageSize;

            comm.Parameters.Add(
new SqlParameter("@pageIndex", SqlDbType.Int));
            comm.Parameters[
5].Value = pageIndex;


            comm.Parameters.Add(
new SqlParameter("@TotalPage", SqlDbType.Int));
            comm.Parameters[
6].Direction = ParameterDirection.Output;


            comm.CommandType 
= CommandType.StoredProcedure;
            SqlDataAdapter dataAdapter 
= new SqlDataAdapter(comm);
            DataSet ds 
= new DataSet();
            dataAdapter.Fill(ds);
            TotalPage 
= (int)comm.Parameters[6].Value;           

            conn.Close();
            conn.Dispose();
            comm.Dispose();
            db.Dispose();
            
return ds;
        }
        
#endregion

 

 分页代码显示


 #region 分页代码显示
        
/// <summary>
        
/// 分页代码显示
        
/// </summary>
        
/// <param name="Url">跳转地址</param>
        
/// <param name="TotleNum">总数据量</param>
        
/// <param name="NumPerPage">每页显示多少条</param>
        
/// <param name="Thepage"></param>
        
/// <param name="ShowJump">是否显示跳转按钮</param>
        
/// <param name="pagestyle">显示风格</param>
        
/// <returns></returns>
        public static string PageStr(string Url, int TotleNum, int NumPerPage, int Thepage, bool ShowJump, int pagestyle)
        {
            
string strTemp;
            
int n;
            
int p;
            
int ii;
            
if (Convert.ToInt32(TotleNum) <= Convert.ToInt32(NumPerPage))
                
return "";
            Url 
= Url.Trim();
            
if (Url != "")
                Url 
+= "&";

            
if (Convert.ToInt32(TotleNum) % Convert.ToInt32(NumPerPage) == 0)
            {
                n 
= TotleNum / NumPerPage;
            }
            
else
            {
                n 
= TotleNum / NumPerPage + 1;
            }
            strTemp 
= "<table align=center  width=\"100%\"><tr><td align=\"center\">";

            strTemp 
+= "共 " + TotleNum + " 条记录 页次:" + Thepage + "/" + n + "页 ";
            strTemp 
+= NumPerPage + "条/页 ";

            
if (Convert.ToInt32(pagestyle) == 1)
            {
                
if (Convert.ToInt32(Thepage) < 2)
                    strTemp 
+= "<font color=\"#999999\">首页 上页</font> ";
                
else
                {
                    strTemp 
+= "<a href=?" + Url + "page=1  class=\"link\">首页</a> ";
                    strTemp 
+= "<a href=?" + Url + "page=" + (Thepage - 1+ "  class=\"link\">上页</a> "; ;
                }
                
if (n - Convert.ToInt32(Thepage) < 1)
                {
                    strTemp 
+= "<font color=\"#999999\">下页 尾页</font> ";
                }
                
else
                {
                    strTemp 
+= "<a href=?" + Url + "page=" + (Thepage + 1+ "  class=\"link\">下页</a> ";
                    strTemp 
+= "<a href=?" + Url + "page=" + n + "  class=\"link\">尾页</a>  ";
                }
            }
            
if (Convert.ToInt32(pagestyle) == 2)
            {
                
if (Convert.ToInt32(Thepage) - 1 % 10 == 0)
                    p 
= (Thepage - 1/ 10;
                
else
                    p 
= (Thepage - 1/ 10;

                
if (p * 10 > 0)
                    strTemp 
+= "<a href=?" + Url + "page=" + p * 10 + " title=上十页 >[&lt;&lt;]</a>   ";
                
int uming_i = 1;
                
for (ii = p * 10 + 1; ii <= p * 10 + 10; ii++)
                {
                    
if (ii == Thepage)
                        strTemp 
+= "<strong><font color=#ff0000>[" + ii + "]</font></strong> ";
                    
else
                        strTemp 
+= "<a href=?" + Url + "page=" + ii + ">[" + ii + "]</a> ";
                    
if (ii == n)
                        
break;
                    uming_i 
= uming_i + 1;
                }
                
if (ii <= n && uming_i == 11)
                    strTemp 
+= "<a href=?" + Url + "page=" + ii + " title=下十页>[&gt;&gt;]</a>  ";
            }

            
if (ShowJump)
            {
                
string guid = CreateCard(Guid.NewGuid().ToString());
                strTemp 
+= "&nbsp;&nbsp;<script>function " + guid + "_a(){var " + guid + "_b=document.getElementById(\"" + guid + "_i\").value;var url=?"+ Url +"&page=+ "+ guid +"_b +;this.location.href=+ url +;}</script>转到:<input type=\"text\" name=\"" + guid + "_i\" id=\"" + guid + "_i\" style=\"width:20px;height:15px;\" /> 页&nbsp; <input name=\"pagebutton\" type=\"button\" value=\"跳转\" onclick=\"return " + guid + "_a();\" />";
            }
            strTemp 
+= "</td></tr></table>";
            
return (string)strTemp;
        }
        
#endregion

 

   
#region 显示页面输入框
        
/// <summary>
        
/// 显示页面输入框
        
/// </summary>
        
/// <param name="str"></param>
        
/// <returns></returns>
        private static string CreateCard(string str)
        {
            
string card = str;
            
for (int i = 0; i <= 9; i++)
            {
                card 
= card.Replace(i.ToString(), "").Replace("-""").ToUpper();

            }         

            
return card;


        }
        
#endregion

 

 分页调用示例 


 #region 分页
            
string TblName = tbl;
            
string Fields = "id,gxmc,zymc,wc,fs,pc,bwlqrs,bzylqrs,bzyzgf,zgfwc,bzyzdf,zdfwc,pjf,cs,xnwc,pro";//读取的字段
            string OrderField = " fs desc";//排序
            string SqlWhere = "";//条件
            if (!string.IsNullOrEmpty(pc))
            {
                SqlWhere 
= " pc in(" + pc + ")";
            }

            
int PageSize = 20//分页大小
            int totalpage = 0;
            
int pageIndex;
            
string _page = "1";
            _page 
= Convert.ToString(Request.QueryString["page"]);
            
if (string.IsNullOrEmpty(_page))
            {
                _page 
= "1";
            }
            
else
            {
                _page 
= Fun.FilterSQL(_page);
            }
            
if (_page == "0")
            {
                _page 
= "1";
            }
            pageIndex 
= Convert.ToInt32(_page);
            
string pagestr= "";
            DataSet ds 
= GetPage.PageData(TblName, Fields, OrderField, SqlWhere, PageSize, pageIndex, out totalpage, conn2);
            
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                
string TR = " onmouseover=\"this.style.background=#FFF9E8;\" onmouseout=\"this.style.background=#FFFFFF;\"";

                
if (i % 2 == 0)
                {

                    TR 
= " class=\"alter\" onmouseover=\"this.style.background=#FFF9E8;\" onmouseout=\"this.style.background=#EBF3FD;\"";
                }

                pagestr 
+= "<tr " + TR + "><td> <input name=\"id\" value=\"" + ds.Tables[0].Rows[i]["id"].ToString() + "\" type=\"checkbox\" /></td><td>&nbsp;" + ds.Tables[0].Rows[i]["gxmc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zymc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["fs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["wc"].ToString() + "</td><td class=\"gray\" align=\"center\">" + setxnwc(ds.Tables[0].Rows[i]["xnwc"].ToString(), ds.Tables[0].Rows[i]["wc"].ToString(), ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td>&nbsp;" + setpc(ds.Tables[0].Rows[i]["pc"].ToString()) + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bwlqrs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzylqrs"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzyzgf"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zgfwc"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["bzyzdf"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["zdfwc"].ToString() + "</td><td>" + ds.Tables[0].Rows[i]["pjf"].ToString() + "</td>" + GetTblName(tbl, "<td>&nbsp;" + ds.Tables[0].Rows[i]["pro"].ToString() + "</td><td>&nbsp;" + ds.Tables[0].Rows[i]["cs"].ToString() + "</td>"+ "<td><a href=\"#\" onclick=\"Confirm1(真的要修改吗?,wj_add.aspx,id=" + ds.Tables[0].Rows[i]["id"].ToString() + ");return false;\">修改</a></td><td><a href=\"#\" onclick=\"Confirm(真的要删除吗?,id=" + ds.Tables[0].Rows[i]["id"].ToString() + "&act=del);return false;\">删除</a></td></tr>";
            }
            ds.Clear();
            ds.Dispose();
          Page_list.Text 
= pagestr; //绑定分页数据

            
this.PageStr.Text = GetPage.PageStr("tbl=" + tbl + "&title=" + title + "&subtitle=" + subtitle + "&pc=" + pc, totalpage, PageSize, pageIndex, true2);//绑定分页导航
            #endregion

 

posted on 2009-07-07 22:23 钱途无梁 阅读(...) 评论(...) 编辑 收藏