declare @str nvarchar(3000);
set @str = 'select * from @t';
exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';消息 1087,级别 15,状态 2,第 1 行
必须声明表变量 "@t"。
谢谢。

解决方案 »

  1.   

    declare @str nvarchar(3000);
    set @str = 'select * from @t';
    exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';如果你想写一个存储过程的话,可以把@t设置为一个参数
    如果你就是想这样用的话
    不妨这样写:
    declare @str nvarchar(3000);
    set @str = 'select * from ';
    exec (@str + '@t')
      

  2.   

    好象要这样:
    execute sp_executesql 
              N'select * from pubs.dbo.employee where job_lvl = @level',
              N'@level tinyint',
              @level = 35
      

  3.   


    或者这样:declare @str nvarchar(3000)
    declare @t varchar(100)
    set @str = 'select * from '
    set @t='Article'
    exec (@str + @t)
      

  4.   

    我的问题是往里面传变量的值。
    而不是连加字符串。
    'select * from @table'
    像在这样的语句中这个 @table 变量传不进去。
    不知道有没有办法解决呢?
      

  5.   

    declare @str nvarchar(3000);
    set @str = 'select * from @t';
    exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';把@t该为临时表
    declare @str nvarchar(3000);
    set @str = 'select * from #t';
    exec sp_executesql @str,N'#t varchar(100)',#t = 'Article';
      

  6.   

    declare @str nvarchar(3000), @t nvarchar(100)
    select @str = 'select * from ', @t='titles'exec(@str+@t)
      

  7.   

    这样试试:
    if object_id('tempdb..#Article') is not null
        drop table #Article
    GO
    ----创建测试数据
    create table #Article(id int)
    insert #Article 
    select 1 union all
    select 2 union alL
    select 3----创建SQL字符串
    declare @str nvarchar(3000)
    set @str = 'EXEC(''select * from '' + @t)'----执行SQL字符串,参数为表名称
    exec sp_executesql @str,N'@t varchar(100)',@t = '#Article'----清除测试环境
    drop table #Article/*结果
    id
    ------------------
    1
    2
    3
    */
      

  8.   

    像这样  'aaa' + 'bbb' 有字符数量 4000 或者 8000 的限制吗?
      

  9.   

    如果是EXEC('aaa' + 'bbb')这样则没有字符数量限制.
    如果是set @str = 'aaa' + 'bbb'则有数量限制,不能超过@str声明的长度.