declare @newtablename varcahr(100),@pid int, @i int
set @newtablename ='Usergrade'
set @i=1
 set @sql1='SELECT @pid=pid FROM '+@newtablename+' where id='+convert(varchar(50),@i)
            exec sp_executesql @sql1,N'@pid int out',@pid out错误提示
消息 1087,级别 15,状态 2,第 1 行
必须声明表变量 "@newtablename"。

解决方案 »

  1.   

    这样试下declare @newtablename varcahr(100),@pid int, @i int 
    set @newtablename ='Usergrade' 
    set @i=1 
    set @sql1='SELECT ' + cast(@pid as varchar(10)) + ' = pid FROM ' + '''' + @newtablename + '''' + ' where id = '+convert(varchar(50),@i) 
    exec sp_executesql @sql1
      

  2.   

    declare @newtablename varcahr(100),@pid int, @i int ,@sql1 varchar(100)
    set @newtablename ='Usergrade' 
    set @i=1 
    select @sql1='SELECT @pid=pid FROM '+ @newtablename +' where id='+convert(varchar(50),@i) 
                exec sp_executesql @sql1,N'@pid int out',@pid  out 
      

  3.   

    declare @newtablename varcahr(100),@pid int, @i int 
    改成:
    declare @newtablename varchar(100),@pid int, @i intvarchar你写成varcahr了..别的没有问题
      

  4.   

    declare @newtablename varchar(100),@pid int, @i int ,@sql1 varchar(100) 
    set @newtablename ='Usergrade' 
    set @i=1 
    set @sql1='SELECT @pid=pid FROM '+@newtablename+' where id='+convert(varchar(50),@i) 
                exec sp_executesql @sql1,N'@pid int out',@pid out错误提示 
    消息 1087,级别 15,状态 2,第 1 行 
    必须声明表变量 "@newtablename"。
    我定义了@sql1 varchar(100) 的,只是复制掉了。不是那个的原因
      

  5.   

    declare @newtablename varchar(100),@pid int, @i int ,@sql1 varchar(100) 
    set @newtablename ='Usergrade' 
    set @i=1 
    set @sql1='SELECT @pid=pid FROM '+@newtablename+' where id='+convert(varchar(50),@i) 
                exec sp_executesql @sql1,N'@pid int out',@pid out错误提示 
    消息 1087,级别 15,状态 2,第 1 行 
    必须声明表变量 "@newtablename"。 
    我的声明都是真确的,只是我在这里写错了。
      

  6.   

    @sql1 定义成 nvarchar的   sp_executesql 要求ntext/nchar/nvarchar参数
    我机器上这样后没有问题