关于ADOQuery创设SQL临时表的怪现象,求解释

关于ADOQuery创建SQL临时表的怪现象,求解释!
ADOQuery1和ADOQuery2的Connection是一样的
现象一:ADOQuery2不可以访问ADOQuery1创建的临时表#test

  with ADOQuery1 do
  begin
    Close;
    SQL.Text :='select * into #test from poshls where FBillNo=:BillNo ';
    Parameters.ParamByName('BillNo').Value:='A00127101';
    ExecSQL;
  end ;
  with ADOQuery2 do
  begin
    Close;
    SQL.Text := 'select * from #test ';
    Open;
  end;


现象二:ADOQuery2可以访问ADOQuery1创建的临时表#test

  with ADOQuery1 do
  begin
    Close;
    SQL.Text :='select * into #test from poshls where FBillNo='+QuotedStr('A00127101');
    ExecSQL;
  end ;
  with ADOQuery2 do
  begin
    Close;
    SQL.Text := 'select * from #test ';
    Open;
  end;


为什么会出现这两种不同情况呢?
我用以下语句分别查询了这两种情况:
select * from tempdb..sysobjects order by crdate desc

现象一的结果是关于ADOQuery创设SQL临时表的怪现象,求解释
现象二的结果是关于ADOQuery创设SQL临时表的怪现象,求解释
特别显眼的是现象一中Name怎么不是类似二那样#test__……的呢?当然也注意到他们的xtype不一样,但不懂
另外,是否有办法使得ADOQuery2能访问现象一中的已经创建的#test呢?
------解决方案--------------------
你这种情况不如建一个储存过程。或直接建视图或ADOQUERY中查询语句复杂点就可了,你那样用系统可能不稳定。
------解决方案--------------------
创建视图是一个比较好的解决办法
------解决方案--------------------
为什么要用临时表呢?如果LZ用的是sql server的话,可以在服务器端写自定义函数来创建虚拟表。
------解决方案--------------------
方法1得到的执行方式是:exec sp_executesql N'...', N'@P1 varchar(4)', '0001'
实际上ADOQuery2执行时,已经在不同的session里面了,所以找不到这个对象,方法2完全是同一个session里面的,所以正常,方法2很常规的做法,不觉得有什么问题。
------解决方案--------------------
楼上解释得很清楚了。

但是,不大同意“钻牛角尖”一说,因为弄通一个问题,是一回事,怎么使用又是另一回事,如果大家都不“钻牛角尖”了,写出来的代码都一样,就不存在差异了。事实上,往往是使用的方式方法不同,想的点子不同,效果或会相去甚远。技巧,有时也是“钻”出来的。