我刚刚入门,想练习创建临时表,在创建之前我希望先判断要创建的表是否已经存在,若存在则删除这个表,否则再创建的时候会引起冲突,我的代码是这样的:
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用来管理此表是哪个进程中的表,以避免并发问题。
你看局部临时表的定义就知道了。