2017-04-13 76 views
0

這可能是一個多問題:IF EXISTS不會刪除臨時表

當我發出statment

IF OBJECT_ID('temp..#tablename) IS NOT NULL --drop the table here 

它不會刪除臨時表。當我去看看臨時數據庫,這個名字是完全不同的...

#tablename___________________________________________00000001069F 

很明顯,drop語句不會使用這個。如何確保使用上述語句刪除臨時表。另外,如果我在創建臨時表語句之前使用「USE dbName」,臨時表是否仍然在tempdb或dbName數據庫中創建?默認總是tempDb?

謝謝, RV。

+0

因此不會讓我在這裏發表drop語句。可能防止注射攻擊。但沒有問題。 – rvphx

+1

您的Object_ID – jradich1234

+0

中的表名稱後面的「缺少a」是啊..可能發生在編輯此頁面上的代碼時。但那不是問題。 – rvphx

回答

5

使用應該使用

OBJECT_ID('tempDB..#tablename') 

OBJECT_ID('temp..#tablename') 

並臨時表仍然可以在tempdb中創建或在DBNAME數據庫?默認總是tempDb?

臨時表總是被在tempdb中創建..

原因,你所看到的名稱,如_____00000001069F是由於這樣的事實,臨時表是特定的會話和SQL負責分配域名的對他們來說,讓名稱不會發生衝突,甚至當他們在並行會話使用相同的名稱

看出來DBA.SE這個答案更多的信息,特別是看出來了臨時錶款:

What's the difference between a temp table and table variable in SQL Server?

+0

缺少單引號,應該是...''OBJECT_ID('tempDB ..#tablename')' – jradich1234

+0

@ jradich1234:謝謝,編輯 – TheGameiswar

+0

很酷。我將繼續在腳本的末尾添加一個drop語句,以便我徹底退出並在最後釋放內存。如果僅以會話爲基礎,則無需在開始時檢查它。再次感謝您的解釋。 – rvphx