CREATE procedure wqnews_GetPagedWQNews1
(@table varchar(255),
@pagesize int,
@pageindex int,
@docount bit)
as
set nocount on
if(@docount=1)
select count(newsid) from  ["+ @table +"]
else
begin
declare @indextable table(id int identity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
insert into @indextable(nid) select newsid from ["+ @table +"] order by addtime desc
select O.newsid,O.source,O.heading,O.addtime from ["+ @table +"] O,@indextable t where O.newsid=t.nid
and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
end
set nocount off
GO
对象名 '"+ @table +"' 无效。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 对象名 '"+ @table +"' 无效。不知道这是怎么回事?下面的调用代码:cmd=new SqlCommand("wqnews_GetPagedWQNews1",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@table","wqnews");
cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
cmd.Parameters.Add("@pagesize",pager.PageSize);
cmd.Parameters.Add("@docount",false);
conn.Open();
dg.DataSource=cmd.ExecuteReader();
dg.DataBind();
conn.Close();

解决方案 »

  1.   

    "+ @table +"
    这是什么???
      

  2.   

    select count(newsid) from  @table
      

  3.   

    我想也是这个地方有问题,并且也和你说的一样写,但是在检查语法的时候,它报错:必须声名变量
    ‘@table’,那是怎么回事!
      

  4.   

    存储过程中的表名不能用变量的,实在不行你就在程序中动态拼成SQL语句,再去调用
      

  5.   

    select count(newsid) from [@table]
      

  6.   

    存储过程格式写错了(@table varchar(255),
    @pagesize int,
    @pageindex int,
    @docount bit)参数列表不需要括号的
      

  7.   

    select count(newsid)from[@table]这样写还是不行的,我试过!
      

  8.   

    在存储过程中,如果表名为变量,你必须使用动态SQL语句,
    签于你的分太少,我建议你去查查帮助中的sp_executesql系统存储过程介绍
      

  9.   

    exec ('select count(newsid) from  ['+ @table + ']')
      

  10.   

    我也是刚遇到类似的问题,用了动态 sql 语句就可以了。