declare @tb table(col int)
declare @sql varchar(1000)
insert @tb select 1
union all
select 2set @sql = 'select * from @tb'
exec(@sql)
为什么这样错误为消息 137,级别 15,状态 2,第 11 行
必须声明标量变量 "@tb"。不明白 这样构造sql的原理

解决方案 »

  1.   

    declare @sql varchar(1000)
    insert @tb select 1
    union all
    select 2set @sql = 'select * from '+@tb
    exec(@sql)
      

  2.   

    declare @tb table(col int)
    declare @sql varchar(1000)
    insert @tb select 1
    union all
    select 2select * from @tb直接这样就行了,动态的话,要全动态声明@TB
      

  3.   

    declare @tb table(col int)
    declare @sql varchar(1000)
    insert @tb select 1
    union all
    select 2select * from @tb直接这样,要不然全动态声明@TB
      

  4.   


    declare @sql varchar(1000)set @sql = '
    declare @tb table(col int)
    insert @tb select 1
    union all
    select 2
    select * from @tb'
    exec(@sql)
    /*
    col
    -----------
    1
    2(2 行受影响)
    */
      

  5.   

    declare @tb table(col int)
    declare @sql varchar(1000)
    insert @tb select 1
    union all
    select 2set @sql = 'select * from ' +@tb+ ''
    exec(@sql)
      

  6.   

    怕麻烦可以这样:create table #t(col int)
    declare @sql varchar(1000)
    insert #t select 1
    union all
    select 2set @sql = 'select * from #t'
    exec(@sql)
    /*
    col
    -----------
    1
    2(2 行受影响)
    */drop table #t
      

  7.   

    因为是表变量,才导致这样的问题,UP TONY哥
      

  8.   

    declare @tb table(col int)
    declare @sql varchar(1000)
    insert @tb select 1
    union all
    select 2select * from @tb