日期:2014-05-18  浏览次数:20469 次

请教一个关于临时表创建、判断、销毁的问题!
我刚刚入门,想练习创建临时表,在创建之前我希望先判断要创建的表是否已经存在,若存在则删除这个表,否则再创建的时候会引起冲突,我的代码是这样的:
set nocount on
if exists (select name from tempdb.dbo.sysobjects where name ='#t_temp'and type='U')
  begin
  drop table #t_temp
  end

else
  begin
select top 6 seqid,tid,upipv4_tcp into #t_temp 
  from t_LogStat 
  order by upipv4_tcp,tid

  select top 3 tid 
  from #t_temp
  order by seqid  
  end
go

但当第二次执行这段代码时(即#t_temp临时表已经创建了),系统会报错“#t_temp已经存在于数据库中”,也就是我判断之后的那句删除没起作用,请问这是为什么呢?怎么修改?


------解决方案--------------------
写法如1楼所述.


但是你那么写为什么出错呢?

你打开tempdb看看就知道了。表名为 #t_temp____________数字串

而不是 #t_temp

所以你的语句是从tempdb..sysobjects查不到记录的。

因为#t_temp是针对于进程的,所以表名后会有后辍字串,sqlserver用来管理此表是哪个进程中的表,以避免并发问题。

你看局部临时表的定义就知道了。