一.对数据进行分页的时候..用控件呢.还是不用控件呢?两个效率上有差别么?二.求一高效存储过程分页实例.不需要通用...但要支持多字段排序...可能本人技术比较面条..请兄弟们帖上代码..谢谢

解决方案 »

  1.   

    网上大把的。
    1------------------------------------
     2--用途:分页存储过程(对有主键的表效率极高)  
     3--说明:
     4------------------------------------
     5
     6ALTER PROCEDURE UP_GetRecordByPage
     7    @tblName      varchar(255),       -- 表名
     8    @fldName      varchar(255),       -- 主键字段名
     9    @PageSize     int = 10,           -- 页尺寸
    10    @PageIndex    int = 1,            -- 页码
    11    @RowCount    int output,            -- 返回记录总数
    12    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    13    @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
    14AS
    15
    16declare @strSQL   varchar(6000)       -- 主语句
    17declare @strTmp   varchar(100)        -- 临时变量
    18declare @strOrder varchar(400)        -- 排序类型
    19
    20if @OrderType != 0
    21begin
    22    set @strTmp = '<(select min'
    23    set @strOrder = ' order by [' + @fldName +'] desc'
    24end
    25else
    26begin
    27    set @strTmp = '>(select max'
    28    set @strOrder = ' order by [' + @fldName +'] asc'
    29end
    30
    31set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    32    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    33    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    34    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    35    + @strOrder
    36
    37if @strWhere != ''
    38    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    39        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    40        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    41        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
    42        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
    43
    44if @PageIndex = 1
    45begin
    46    set @strTmp =''
    47    if @strWhere != ''
    48        set @strTmp = ' where ' + @strWhere
    49
    50    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    51        + @tblName + ']' + @strTmp + ' ' + @strOrder
    52end
    53
    54
    55declare @sql NVARCHAR(400)
    56set @sql = N'select @RowCount=count(*) from '+@tblName+' where '+ @strWhere
    57EXEC sp_executesql @sql,N'@RowCount int OUT',@RowCount OUT  
    58
    59exec (@strSQL)
      

  2.   

    貌似webdiyer的网站上有
    去找找吧
      

  3.   


             /// <summary>
             /// 分页获取数据列表
             /// </summary>
             public DataSet GetList(int PageSize,int PageIndex,string strWhere,ref int Output)
             {
                 SqlParameter[] parameters = {
                         new SqlParameter("@tblName", SqlDbType.VarChar, 255),
                         new SqlParameter("@fldName", SqlDbType.VarChar, 255),
                         new SqlParameter("@PageSize", SqlDbType.Int),
                         new SqlParameter("@PageIndex", SqlDbType.Int),
                         new SqlParameter("@RowCount", SqlDbType.Int),
                         new SqlParameter("@OrderType", SqlDbType.Bit),
                         new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
                         };
                 parameters[0].Value = "TM_TeachInfo";
                 parameters[1].Value = "InfoID";
                 parameters[2].Value = PageSize;
                 parameters[3].Value = PageIndex;
                 parameters[4].Direction = System.Data.ParameterDirection.Output;
                 parameters[5].Value = 1;
                 parameters[6].Value = strWhere;
     
                 DataSet ds = DbHelperSQL.RunProcedure("UP_GetRecordByPage",parameters,"ds");
     
                 if (parameters[4].Value != DBNull.Value  && parameters[4].Value.ToString() != string.Empty)
                 {
                     Output=Convert.ToInt32(parameters[4].Value);
                 }
     
                 return ds;
             }
      

  4.   

    http://dev.csdn.net/Develop/article/28/74067.shtm
    一个近乎完美的分页存储过程
      

  5.   

    DbHelperSQL.RunProcedure是什么意思?
      

  6.   

    CREATE PROC sp_PageView
    @tbname     sysname,             --要分页显示的表名
    @FieldKey   nvarchar(1000),      --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
    @PageCurrent int=1,              --要显示的页码
    @PageSize   int=10,              --每页的大小(记录数)
    @FieldShow  nvarchar(1000)='',   --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
    @FieldOrder  nvarchar(1000)='',  --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC用于指定排序顺序
    @Where     nvarchar(1000)='',    --查询条件
    @PageCount  int OUTPUT           --总页数
    AS
    SET NOCOUNT ON
    --检查对象是否有效
    IF OBJECT_ID(@tbname) IS NULL
    BEGIN
        RAISERROR(N'对象"%s"不存在',1,16,@tbname)
        RETURN
    END
    IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
    BEGIN
        RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
        RETURN
    END--分页字段检查
    IF ISNULL(@FieldKey,N'')=''
    BEGIN
        RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
        RETURN
    END--其他参数检查及规范
    IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
    IF ISNULL(@PageSize,0)<1 SET @PageSize=10
    IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
    IF ISNULL(@FieldOrder,N'')=N''
        SET @FieldOrder=N''
    ELSE
        SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
    IF ISNULL(@Where,N'')=N''
        SET @Where=N''
    ELSE
        SET @Where=N'WHERE ('+@Where+N')'--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
    IF @PageCount IS NULL
    BEGIN
        DECLARE @sql nvarchar(4000)
        SET @sql=N'SELECT @PageCount=COUNT(*)'
            +N' FROM '+@tbname
            +N' '+@Where
        EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
        SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
    END--计算分页显示的TOPN值
    DECLARE @TopN varchar(20),@TopN1 varchar(20)
    SELECT @TopN=@PageSize,
        @TopN1=@PageCurrent*@PageSize--第一页直接显示
    IF @PageCurrent=1
        EXEC(N'SELECT TOP '+@TopN
            +N' '+@FieldShow
            +N' FROM '+@tbname
            +N' '+@Where
            +N' '+@FieldOrder)
    ELSE
    BEGIN
        --生成主键(惟一键)处理条件
        DECLARE @Where1 nvarchar(4000),@s nvarchar(1000)
        SELECT @Where1=N'',@s=@FieldKey
        WHILE CHARINDEX(N',',@s)>0
            SELECT @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
                @Where1=@Where1
                    +N' AND a.'+LEFT(@s,CHARINDEX(N',',@s)-1)
                    +N'='+LEFT(@s,CHARINDEX(N',',@s)-1)
        SELECT @Where1=STUFF(@Where1+N' AND a.'+@s+N'='+@s,1,5,N''),
            @TopN=@TopN1-@PageSize    --执行查询
        EXEC(N'SET ROWCOUNT '+@TopN1
            +N' SELECT '+@FieldKey
            +N' INTO # FROM '+@tbname
            +N' '+@Where
            +N' '+@FieldOrder
            +N' SET ROWCOUNT '+@TopN
            +N' DELETE FROM #'
            +N' SELECT '+@FieldShow
            +N' FROM '+@tbname
            +N' a WHERE EXISTS(SELECT * FROM # WHERE '+@Where1
            +N') '+@FieldOrder)
    END
      

  7.   

    CREATE PROC sp_PageView
    @tbname     sysname,               --要分页显示的表名
    @FieldKey   nvarchar(1000),      --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
    @PageCurrent int=1,               --要显示的页码
    @PageSize   int=10,                --每页的大小(记录数)
    @FieldShow nvarchar(1000)='',      --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
    @FieldOrder nvarchar(1000)='',      --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
                                              用于指定排序顺序
    @Where    nvarchar(1000)='',     --查询条件
    @PageCount int OUTPUT             --总页数
    AS
    SET NOCOUNT ON
    --检查对象是否有效
    IF OBJECT_ID(@tbname) IS NULL
    BEGIN
        RAISERROR(N'对象"%s"不存在',1,16,@tbname)
        RETURN
    END
    IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
        AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
    BEGIN
        RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
        RETURN
    END--分页字段检查
    IF ISNULL(@FieldKey,N'')=''
    BEGIN
        RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
        RETURN
    END--其他参数检查及规范
    IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
    IF ISNULL(@PageSize,0)<1 SET @PageSize=10
    IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
    IF ISNULL(@FieldOrder,N'')=N''
        SET @FieldOrder=N''
    ELSE
        SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
    IF ISNULL(@Where,N'')=N''
        SET @Where=N''
    ELSE
        SET @Where=N'WHERE ('+@Where+N')'--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
    IF @PageCount IS NULL
    BEGIN
        DECLARE @sql nvarchar(4000)
        SET @sql=N'SELECT @PageCount=COUNT(*)'
            +N' FROM '+@tbname
            +N' '+@Where
        EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
        SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
    END--计算分页显示的TOPN值
    DECLARE @TopN varchar(20),@TopN1 varchar(20)
    SELECT @TopN=@PageSize,
        @TopN1=(@PageCurrent-1)*@PageSize--第一页直接显示
    IF @PageCurrent=1
        EXEC(N'SELECT TOP '+@TopN
            +N' '+@FieldShow
            +N' FROM '+@tbname
            +N' '+@Where
            +N' '+@FieldOrder)
    ELSE
    BEGIN
        --处理别名
        IF @FieldShow=N'*'
            SET @FieldShow=N'a.*'    --生成主键(惟一键)处理条件
        DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
            @s nvarchar(1000),@Field sysname
        SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
        WHILE CHARINDEX(N',',@s)>0
            SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
                @s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
                @Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
                @Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
                @Where=REPLACE(@Where,@Field,N'a.'+@Field),
                @FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
                @FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
        SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
            @FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
            @FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
            @Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),    
            @Where2=CASE
                WHEN @Where='' THEN N'WHERE ('
                ELSE @Where+N' AND ('
                END+N'b.'+@s+N' IS NULL'+@Where2+N')'    --执行查询
        EXEC(N'SELECT TOP '+@TopN
            +N' '+@FieldShow
            +N' FROM '+@tbname
            +N' a LEFT JOIN(SELECT TOP '+@TopN1
            +N' '+@FieldKey
            +N' FROM '+@tbname
            +N' a '+@Where
            +N' '+@FieldOrder
            +N')b ON '+@Where1
            +N' '+@Where2
            +N' '+@FieldOrder)
    END
      

  8.   

    http://www.webdiyer.com/download/default.aspx
    下载AspNetPager702Samples.rar 有你想要的.
      

  9.   

    sql server 2005分页存储过程和sql server 2000分页存储过程
      

  10.   

    请帮我看看这样该怎么写?存储过程:CREATE PROCEDURE pagination 
    @tblName varchar(255), -- 表名 
    @strGetFields varchar(1000) = '*', -- 需要返回的列 
    @fldName varchar(255)='', -- 排序的字段名 
    @PageSize int , -- 页尺寸 
    @PageIndex int, -- 页码 
    @doCount bit , -- 返回记录总数, 非 0 值则返回 
    @OrderType bit , -- 设置排序类型, 非 0 值则降序 
    @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) 
    AS 
    declare @strSQL varchar(5000) -- 主语句 
    declare @strTmp varchar(110) -- 临时变量 
    declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 
    begin 
    if @strWhere !='' 
    set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere 
    else 
    set @strSQL = "select count(*) as Total from [" + @tblName + "]" 
    end 
    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 
    else 
    begin if @OrderType != 0 
    begin 
    set @strTmp = "<(select min" 
    set @strOrder = " order by [" + @fldName +"] desc" 
    --如果@OrderType不是0,就执行降序,这句很重要! 
    end 
    else 
    begin 
    set @strTmp = ">(select max" 
    set @strOrder = " order by [" + @fldName +"] asc" 
    end if @PageIndex = 1 
    begin 
    if @strWhere != '' 
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder 
    else 
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder 
    --如果是第一页就执行以上代码,这样会加快执行速度 
    end 
    else 
    begin 
    --以下代码赋予了@strSQL以真正执行的SQL代码 
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" 
    + @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder if @strWhere != '' 
    set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" 
    + @tblName + "] where [" + @fldName + "]" + @strTmp + "([" 
    + @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " [" 
    + @fldName + "] from [" + @tblName + "] where " + @strWhere + " " 
    + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder 
    end 
    end 
    exec (@strSQL)
    GO类文件:Member.cs
    public DataSet User_Select_Person(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, int doCount, int OrderType, string strWhere)
        {
            SqlConnection conn = new SqlConnection(DB.strConn);
            conn.Open();
            SqlCommand comm = new SqlCommand("pagination", conn);        comm.Parameters.Add("@tblName", SqlDbType.VarChar).Value = tblName;
            comm.Parameters.Add("@strGetFields", SqlDbType.VarChar).Value = strGetFields;
            comm.Parameters.Add("@fldName", SqlDbType.VarChar).Value = fldName;
            comm.Parameters.Add("@PageSize", SqlDbType.Int).Value = PageSize;
            comm.Parameters.Add("@PageIndex", SqlDbType.Int).Value = PageIndex;
            comm.Parameters.Add("@doCount", SqlDbType.Int).Value = doCount;
            comm.Parameters.Add("@OrderType", SqlDbType.Int).Value = OrderType;
            comm.Parameters.Add("@strWhere", SqlDbType.VarChar).Value = strWhere;
            comm.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);
            DataSet ds = new DataSet();
            dataAdapter.Fill(ds);
            conn.Close();
            return ds;
        }
    public static string GoToPager(int page, int pageSize, int Count, string Url)
        {
            string strHtml = "";
            int prevPage = page - 1;
            int nextPage = page + 1;
            int startPage;
            int pageCount = (int)Math.Ceiling((double)Count / pageSize);
            strHtml += "<div class='pageContent' style='text-align:Left;overflow:hidden;height:25px;line-height:140%'>";
            strHtml += "<span style='float:left'>页码: " + page + " / " + pageCount + "&nbsp;&nbsp;&nbsp;总记录:" + Count + "</span>";
            strHtml += "<div class='page' style='float:Right'><ul><li class='pages'>";
            if (prevPage < 1)
            {
                strHtml += "<span title='首页'>首页&nbsp;</span>";
                strHtml += "<span title='上一页'>上一页&nbsp;</span>";
            }
            else
            {
                strHtml += "<span title='首页'><a href='" + Url + "=1'>首页</a>&nbsp;</span>";
                strHtml += "<span title='上一页'><a href='" + Url + "=" + prevPage + "'>上一页</a>&nbsp;</span>";
            }
            if (page % 10 == 0)
            {
                startPage = page - 9;
            }
            else
            {
                startPage = page - page % 10 + 1;
            }
            if (startPage > 10) strHtml += "<span title='前10页'><a href='" + Url + "=" + (startPage - 1) + "'>...</a></span>";
            for (int i = startPage; i < startPage + 10; i++)
            {
                if (i > pageCount) break;
                if (i == page)
                {
                    strHtml += "<span title='页 " + i + "'> <font color='#ff0000'>[" + i + "]</font> </span>";
                }
                else
                {
                    strHtml += "<span title='页 " + i + "'> <a href='" + Url + "=" + i + "'>[" + i + "]</a> </span>";
                }
            }
            if (pageCount >= startPage + 10) strHtml += "<span title='后10页'><a href='" + Url + "=" + (startPage + 10) + "'>...</a></span>";
            if (nextPage > pageCount)
            {
                strHtml += "<span title='下一页'>&nbsp;下一页&nbsp;</span>";
                strHtml += "<span title='末页'>末页&nbsp;</span>";
            }
            else
            {
                strHtml += "<span title='下一页'>&nbsp;<a href='" + Url + "=" + nextPage + "'>下一页</a>&nbsp;</span>";
                strHtml += "<span title='末页'><a href='" + Url + "=" + pageCount + "'>末页</a>&nbsp;</span>";
            }
            strHtml += "</li></ul></div></div>";
            return strHtml;
        }在显示页.我是用Repeater1来显示的..怎么让它正常的显示出来并分页呢???
    请各位兄弟帮忙private void User_Select_Person()
        {
            string tblName = "UserList";
            string strGetFields = "*";
            string fldName = "G_id";
            int PageSize = 10;
            int PageIndex = Convert.ToInt32(Request.QueryString["PageIndex"]);
            int doCount = 1;
            int OrderType = 1;
            string strWhere = "G_Flag=1";        Member Member = new Member();
            DataSet ds = Member.User_Select_Person(tblName,strGetFields,fldName,PageSize,PageIndex,doCount,OrderType,strWhere);        this.Repeater1.DataSource = ds;
            this.Repeater1.DataBind();    }
      

  11.   


    /**//*
      经测试,在14483461 条记录中查询第100000 页,每页10 条记录按升序和降序第一次时间均为0.47 秒,第二次时间均为0.43 秒,测试语法如下:
      exec GetRecordFromPage news,newsid,10,100000
      news 为表名, newsid 为关键字段, 使用时请先对newsid 建立索引。  函数名称: GetRecordFromPage
      函数功能: 获取指定页的数据
      参数说明: @tblName      包含数据的表名
               @fldName      关键字段名
               @PageSize     每页记录数
               @PageIndex    要获取的页码
               @OrderType    排序类型, 0 - 升序, 1 - 降序
               @strWhere     查询条件(注意: 不要加where)
      创建时间: 2004-07-04
      修改时间: 2008-02-13
    */
    ALTER PROCEDURE [dbo].[GetRecordFromPage]
        @tblName      varchar(255),       -- 表名
        @fldName      varchar(255),       -- 字段名
        @PageSize     int = 10,           -- 页尺寸
        @PageIndex    int = 1,            -- 页码
        @OrderType    bit = 0,            -- 设置排序类型, 非0 值则降序
        @IsCount bit = 0, -- 返回记录总数, 非0 值则返回
        @strWhere     varchar(2000) = ''  -- 查询条件(注意: 不要加where)
        
    ASdeclare @strSQL   varchar(6000)       -- 主语句
    declare @strTmp   varchar(1000)       -- 临时变量
    declare @strOrder varchar(500)        -- 排序类型if @OrderType != 0
    begin
        set @strTmp = '<(select min'
        set @strOrder = ' order by [' + @fldName + '] desc'
    end
    else
    begin
        set @strTmp = '>(select max'
        set @strOrder = ' order by [' + @fldName +'] asc'
    endset @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
        + @strOrderif @strWhere != ''
        set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
            + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
            + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
            + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderif @PageIndex = 1
    begin
        set @strTmp = ''
        if @strWhere != ''
            set @strTmp = ' where (' + @strWhere + ')'    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
            + @tblName + ']' + @strTmp + ' ' + @strOrder
    end
    if @IsCount != 0 
    set @strSQL = 'select count(' + @fldName + ') as Total from [' + @tblName + ']' 
    exec (@strSQL)
      

  12.   

    也能,还不行给我留言,csdn消息老有问题
      

  13.   

    sql分实在强大还是用最简单的比较快