在写存储过程的时候用到了表变量
如下:declare @tab_sa table (
CD char(8)
,NAME nvarchar(25)
)
但是在别的语句中用这个表变量作为子查询的时候,居然一直不出数据,
很费劲 不知道什么原因 望高人指点啊select a1,a2,a3
from TbA A
where 
a2  in (select a2 from @tab_sa)
and a1='11'

解决方案 »

  1.   

     @tab_sa 里压根就没有a2这个字段吧......
      

  2.   

    哈哈,我也遇到过这个问题的declare @tab_sa table ( 
    ID int IDENTITY(1,1) NOT NULL,
    CD char(8) 
    ,NAME nvarchar(25) 
    primary key(id)
    ) 或者
    create table #tab_sa ( 
    ID int IDENTITY(1,1) NOT NULL,
    CD char(8) 
    ,NAME nvarchar(25) 
    primary key(id)

      

  3.   

    select a1,a2,a3 
    from TbA A 
    where a2  in (select name from @tab_sa) 
    and a1='11'
      

  4.   


    表变量的数据量有多少呢?改成temp table吧,@表量没有统计数据,生成的查询计划会很差。
      

  5.   

    其实我建议你用临时表操作,#tempTable 而且这个临时表也是自动释放,并且是线程安全的 他的定义和变量一样
      

  6.   

    如果a2字段是存在的,可以这样,效率会更好,in里的子查询如果数据量很大的话效率会很低select a.a1,a.a2,a.a3 
    from TbA A inner join @tab_sa B 
    on A.a2=B.a2
    where A.a1='11'
      

  7.   

    a2字段是存在的 我改成了 inner join  依然很慢 要两分钟
    表变量里面 不会超过50条数据的
    TbA 这个表到是有几万条数据