2016-11-21 72 views
1

我遇到一个奇怪的现象之所以临时表似乎在SQL Server中扩大其范围

我使用与选择创建成技术一个临时表像

select * 
into #MyTempTable 
from TABLE 

原则范围pf的#MyTempTable仅限于进程ID。

但即使我明确地使用

drop table #MyTempTable 

当我再次运行

select * 
into #MyTempTable 
from TABLE 

我有一个临时表已经存在的错误。

为什么会发生这种情况?我从来没有面对过这个问题,我使用这种技术多年以来。

回答

4

绝对是在同一个窗口中运行的代码?如果您将桌子放在另一个窗口中,它将不会正确放下桌子。

我总是认为最好的做法是运行代码,在明确创建表之前检查它是否存在(而不是SELECT INTO)。像这样的东西;

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL DROP TABLE #TempTable 
CREATE TABLE #TempTable (RowNumber int identity(1,1), OtherField nvarchar(max)) 
+0

是的,这是非常好的。事实上,我尝试了你的方法,我的问题消失了。 'select into'技术只是一种节省时间的方法。 – LaBracca

+0

是的,它可能有点痛苦(它让你来到堆栈溢出来询问它)。从长远来看,遵守上述代码的习惯实际上可能更节省时间。 –