有tb1和tb2两张表(没有主键,也没有自动递增的id)
1、select identity(int,1,1) as autoID, * into #Tmp from tb1
   select max(autoID) as autoID into #Tmp2 from #Tmp group by num,obtime
2、insert into tb2 SELECT * from #Tmp where autoID in(select autoID from #tmp2)
3、delete from tb1
如果我在查询分析器里面按1,2,3步骤执行以后,执行SELECT * from #Tmp where autoID in(select autoID from #tmp2)还能查询到临时表的数据但是如果以上步骤我是在作业或者触发器里面执行完,再执行SELECT * from #Tmp where autoID in(select autoID from #tmp2)的话,就发现2张临时表都不存在了谁能给我解释下临时表的这个问题,谢谢!

解决方案 »

  1.   

    本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
    本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name)。
    除非使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去: 
    当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。
    所有其它本地临时表在当前会话结束时自动除去。
    全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。