我用了webdiyer的http://www.webdiyer.com/utility/procgen.aspx 
中的两个方法分别创建了一个相同的只带一个参数的分页存储过程,运用到我的程序中,只有一个正常,另一个不正常:1 正常的存储过程:(用的是临时表的办法)2 不正常的(是用多重select 语句的方法)在IE中运行报错如下:异常详细信息: System.Data.SqlClient.SqlException: 必须声明变量 '@categorycode'。而同样的程序,我调用了第1种方法:(用的是临时表的办法),运行就正常,@categorycode 我是声明了的啊!---------------------------------------------------------俱体详情请看这个:http://www.rczx.com/ask/pr.txt

解决方案 »

  1.   

    1 以下为正常的存储过程:(但是我用的是临时表的方法)CREATE procedure Pr_ListCategoryHtmlNewsWebdiyer2
    (@categorycode VarChar(50),
    @pagesize int,
    @pageindex int,
    @docount bit)
    as
    set nocount on
    if(@docount=1)
    select count(NewsID) from HtmlNews where newscolumncode =@categorycode
    else
    begin
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    create table #pageindex(id int identity(1,1) not null,nid int)
    set rowcount @PageUpperBound
    insert into #pageindex(nid)
    select NewsID from HtmlNews where newscolumncode =@categorycode order by NewsID desc
    select O.NewsID,O.UserID,O.NewsTitle,O.NewsColumnCode
    from HtmlNews O,#pageindex p
    where O.NewsID=p.nid and p.id>@PageLowerBound and p.id<=@PageUpperBound order by p.id
    end
    set nocount off
    GO2 同样的存储过程,不过我用的是多重select 语句的方法
    CREATE procedure Pr_ListCategoryHtmlNewsWebdiyer2
    (@categorycode VarChar(50),
    @pagesize int,
    @pageindex int,
    @docount bit)
    as
    set nocount on
    declare @where varchar(100)
    set @where=" where newscolumncode =@categorycode"
    declare @RecordCount int
    select @RecordCount=count(NewsID) from HtmlNews where newscolumncode =@categorycode
    if(@docount=1)
    select @RecordCount
    else
    begin
    if(@pageindex=1)
    exec('select top '+@pagesize+'NewsID,UserID,NewsTitle,NewsColumnCode from HtmlNews'+@where+' order by NewsID desc')
    else
    begin
    declare @PageUpperBound int
    declare @endrecords int
    set @PageUpperBound=@pageindex*@pagesize
    if(@PageUpperBound-@pagesize)>=@RecordCount
    select ''
    else if(@RecordCount-(@PageUpperBound-@pagesize)<=@pagesize)
    begin
    set @endrecords=@RecordCount-(@PageUpperBound-@pagesize)
    exec('select * from (select top '+@endrecords+' NewsID,UserID,NewsTitle,NewsColumnCode from HtmlNews'+@where+' order by NewsID)A order by NewsID desc')
    end
    else
    exec('select * from (select top '+@pagesize+'* from (select top '+@PageUpperBound+' NewsID,UserID,NewsTitle,NewsColumnCode from HtmlNews'+@where+' order by NewsID desc)A order by NewsID)B order by NewsID desc')
    end
    end
    set nocount off
    go
    这第二种方法,sqlserver检测存储过程都能通过,就是在IE中一运行,就出现
    异常详细信息: System.Data.SqlClient.SqlException: 必须声明变量 '@categorycode'。而这个参数我是明明声明过的啊!
      

  2.   

    set @where=" where newscolumncode =@categorycode"改为:set @where=' where newscolumncode ='''+@categorycode+'''
    试试
      

  3.   

    Sorry,错了,应该是:set @where=' where newscolumncode ='''+@categorycode+''''
    注意后面是四个单引号
      

  4.   

    随便在问一下,各位使用过 吴旗娃老大 分页控件的哥哥,--------------------------------
    在吴旗娃老大的网站上   http://www.webdiyer.com/utility/procgen.aspx
    分页功能使用: 1 Table变量
    2 临时表
    3 多重Select语句 对此控件的这三种存储过程,在使用过程中,您认为效率最高的是哪 一种呢,能说一下为什么吗?能对这三种存储过程依次做一个简单的解释吗?
      

  5.   

    AS 100 MB asp 和 asp .net空间50元/年!,
    同学们可以做一个简单的个人网站用来找工作 
    http: // www.hi876.com 你们也看看吧