CREATE PROCEDURE Mypage
(
     @mepagesize int,        --每页显示记录数
     @mepageint   int,        --分页条显示个数
     @thispage int,        --当前页编号     @msrsall int output,        --总记录数
     @mspagecount int output    --总页数
)
AS
declare @pagecount int    --分页总数
declare @rsall int    --总记录数
declare @top int      --提当前段数据
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
    if @rsall >0     --有数据
        begin
            set @top=@mepagesize*@thispage
            --select top @top * from userinfo where id not in(select @top * from userinfo)
            if @rsall % @mepagesize=0
                begin
                set @pagecount=@rsall / @mepagesize
                end
            else
                begin
                set @pagecount=@rsall / @mepagesize+1
                end
        end
    else        --没数据
        set @msrsall=0
        set @mspagecount=0
GO上面的注释那一行通不过。 
请高手结合我的这个dll文件写一个存储过程http://www.cartoonb2b.cn/mayi.dll,这是我写好的dll 
http://www.cartoonb2b.cn/News_class.aspx?classid=13这是分页后的效果。 

解决方案 »

  1.   

    主要是这一句--select top @top * from userinfo where id not in(select @top * from userinfo)这句是要能通过就好了。我的MAYI.DLL两种分页是可以完全脱离数据库的,只需输入几个参数进来就实现了分页。
      

  2.   

    select top @mepagesize * from userinfo where id not in(select @top * from userinfo)通不过,高手进来帮看看啊。
      

  3.   

    要用动态SQL2005支持top 后变量 
    另外后面一个top 少一个top
      

  4.   


    --功能概述:动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  5.   


    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;public partial class Default3 : System.Web.UI.Page
    {
        MAYI.Mpage Mypp = new MAYI.Mpage();
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                int x = 20;
                int y = 10;
                SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=sa;database=cartoonb2b");
                cn.Open();
                SqlCommand cmd = new SqlCommand("Mypage", cn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@mepagesize", SqlDbType.Int);
                cmd.Parameters["@mepagesize"].Value = x;
                cmd.Parameters.Add("@mepageint", SqlDbType.Int);
                cmd.Parameters["@mepageint"].Value = y;
                cmd.Parameters.Add("@thispage", SqlDbType.Int);
                cmd.Parameters["@thispage"].Value = 1;
                if (Request.QueryString["pp"]!=null)
                {
                    cmd.Parameters["@thispage"].Value = Convert.ToInt32(Request.QueryString["pp"]);
                }
                cmd.Parameters.Add("@msrsall", SqlDbType.Int);
                cmd.Parameters.Add("@mspagecount", SqlDbType.Int);            cmd.Parameters["@msrsall"].Direction = ParameterDirection.Output;
                cmd.Parameters["@mspagecount"].Direction = ParameterDirection.Output;
                cmd.ExecuteNonQuery();
                
                            SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                GridView1.DataSource = ds.Tables[0].DefaultView;
                GridView1.DataBind();            Literal1.Text = Mypp.MyPage(500, x, y, null,  null,"pp", null, null, null);
                cn.Close();
            }
        }
    }CREATE PROCEDURE Mypage
    (
         @mepagesize int, --每页显示记录数
         @mepageint   int, --分页条显示个数
         @thispage int, --当前页编号     @msrsall int output, --总记录数
         @mspagecount int output --总页数
    )
    AS
    declare @pagecount int --分页总数
    declare @rsall int --总记录数
    declare @top int   --提当前段数据
    ------------------------------------------------------------------------------------
    select @rsall=count(*) from userinfo
    ------------------------------------------------------------------------------------
    if @rsall >0  --有数据
    begin
    set @top=@mepagesize*@thispage
    --select top @mepagesize * from userinfo where id not in(select top @top * from userinfo)
    select top 10 id,username,userpass from userinfo
    if @rsall % @mepagesize=0
    begin
    set @pagecount=@rsall / @mepagesize
    end
    else
    begin
    set @pagecount=@rsall / @mepagesize+1
    end
    end
    else --没数据
    set @msrsall=0
    set @mspagecount=0
    GO我把所有的源码发出来,请结合我刚才发的个dll文件,看一下咋整,现在只能提到前10个,别的地方都没事。
      

  6.   


    CREATE PROCEDURE Mypage
    (
         @mepagesize int, --每页显示记录数
         @mepageint   int, --分页条显示个数
         @thispage int, --当前页编号     @msrsall int output, --总记录数
         @mspagecount int output --总页数
    )
    AS
    declare @pagecount int --分页总数
    declare @rsall int --总记录数
    declare @top int   --提当前段数据
    declare @nxx varchar(500)
    set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
    ------------------------------------------------------------------------------------
    select @rsall=count(*) from userinfo
    ------------------------------------------------------------------------------------
    if @rsall >0  --有数据
    begin
    set @top=@mepagesize*@thispage
    exec(@nxx)
    --select top 10 id,username,userpass from userinfo
    if @rsall % @mepagesize=0
    begin
    set @pagecount=@rsall / @mepagesize
    end
    else
    begin
    set @pagecount=@rsall / @mepagesize+1
    end
    end
    else --没数据
    set @msrsall=0
    set @mspagecount=0
    GO貌似这样SQL里没有报错,但执行net时提示top  varchar转为int是出错
      

  7.   


    "set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'"
    移到
     set @top=@mepagesize*@thispage
    后面
      

  8.   


    CREATE PROCEDURE Mypage
    (
         @mepagesize int, --每页显示记录数
         @mepageint   int, --分页条显示个数
         @thispage int, --当前页编号     @msrsall int output, --总记录数
         @mspagecount int output --总页数
    )
    AS
    declare @pagecount int --分页总数
    declare @rsall int --总记录数
    declare @top int   --提当前段数据
    declare @nxx varchar(500)
    ------------------------------------------------------------------------------------
    select @rsall=count(*) from userinfo
    ------------------------------------------------------------------------------------
    if @rsall >0  --有数据
    begin
    set @top=@mepagesize*@thispage
    set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
    exec(@nxx)
    if @rsall % @mepagesize=0
    begin
    set @pagecount=@rsall / @mepagesize
    end
    else
    begin
    set @pagecount=@rsall / @mepagesize+1
    end
    end
    else --没数据
    set @msrsall=0
    set @mspagecount=0
    GO这样也不行耶。
      

  9.   

       set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
    改为
       set @nxx='select top ' + cast(@mepagesize as varchar(10)) + ' * from userinfo where id not in (select top '+ cast(@top as varchar(10)) +' * from userinfo)'
    试试
      

  10.   

    set @top=@mepagesize* (@thispage - 1)
                set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
      

  11.   

    楼上的说法我全试过就是top后面带变量就通不过。郁闷。
      

  12.   

    下面这段语句测试过的
    create table  #t (a varchar(10))
    insert #t
    select 12 union
    select 14 union
    select 4 union
    select 5 union
    select 3 declare @i int,@sql varchar(1000)
    select @i=2,@sql='select top '+cast( @i as varchar(10))+' * from #t '
    exec(@sql)drop table #t
      

  13.   

    to6,14楼
    CREATE PROCEDURE Mypage
    (
         @mepagesize int, --每页显示记录数
         @mepageint   int, --分页条显示个数
         @thispage int, --当前页编号     @msrsall int output, --总记录数
         @mspagecount int output --总页数
    )
    AS
    declare @pagecount int --分页总数
    declare @rsall int --总记录数
    declare @top int   --提当前段数据
    declare @sql varchar(200)
    ------------------------------------------------------------------------------------
    select @rsall=count(*) from userinfo
    ------------------------------------------------------------------------------------
    if @rsall >0  --有数据
    begin
    set @top=@mepagesize*@thispage
    --set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'
    set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo'
    exec(@sql)
    if @rsall % @mepagesize=0
    begin
    set @pagecount=@rsall / @mepagesize
    end
    else
    begin
    set @pagecount=@rsall / @mepagesize+1
    end
    end
    else --没数据
    begin
    set @msrsall=0
    set @mspagecount=0
    end
    set @msrsall=@rsall  --总信息数
    set @mspagecount=@pagecount --分页总数
    GO
    注释的那个sql通不过
      

  14.   


    set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'这个子查询咋写呢。
      

  15.   

    in 后面加个空格像这样的拼SQL语句,你可以用print(@sql)输出,然后检查语法错误
      

  16.   

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
    总提示这CREATE PROCEDURE Mypage
    (
         @mepagesize int, --每页显示记录数
         @mepageint   int, --分页条显示个数
         @thispage int, --当前页编号     @msrsall int output, --总记录数
         @mspagecount int output --总页数
    )
    AS
    declare @pagecount int --分页总数
    declare @rsall int --总记录数
    declare @top int --提当前段数据
    declare @sql varchar(200)
    ------------------------------------------------------------------------------------
    select @rsall=count(*) from userinfo
    ------------------------------------------------------------------------------------
    if @rsall >0  --有数据
    begin
    set @top=@mepagesize*@thispage
    set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'
    --set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo'
    exec(@sql)
    if @rsall % @mepagesize=0
    begin
    set @pagecount=@rsall / @mepagesize
    end
    else
    begin
    set @pagecount=@rsall / @mepagesize+1
    end
    end
    else --没数据
    begin
    set @msrsall=0
    set @mspagecount=0
    end
    set @msrsall=@rsall  --总信息数
    set @mspagecount=@pagecount --分页总数
    GO
      

  17.   

    就这样的select top 10 * from userinfo where id not in(select top 10 * from userinfo)语句不行