2016-11-21 54 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

是的,它可能有點痛苦(它讓你來到堆棧溢出來詢問它)。從長遠來看,遵守上述代碼的習慣實際上可能更節省時間。 –