2012-07-03 89 views
2

我們遇到升級到SQL Server 2012的問題。我正在使用以下腳本來創建臨時表,這些臨時表用於在SQL Server 2008 R2上正常工作,但現在它在2012年產生錯誤:SQL Server 2012臨時表OBJECT_ID問題

if (OBJECT_ID('tempdb..#idstable') > 0) 
    truncate table #idstable 
else 
    create table #idstable (id int not null) 

拋出的錯誤是

已經有一個數據庫名爲 '#idstable' 的對象。

這顯然不是我第一次使用腳本(在同一個事務中)拋出。

有什麼想法?謝謝!

回答

7

在SQL Server 2012中,#TEMP表由負object_id創建的,所以你的腳本不會因爲是工作。最安全的辦法是:(I blogged about this here, and knew it would catch someone

IF OBJECT_ID('tempdb..#idstable') IS NOT NULL 

雖然你的腳本必將失敗,無論如何,如果它是一個批次的一部分。解析器不會讓你嘗試創建兩次相同的#temp表。

+0

我只是不知道爲什麼微軟總是會改變這樣的事情......謝天謝地! –

+3

@MoslemBenDhaou他們可以改變任何無證的東西。微軟有沒有告訴過你#temp table object_ids總是正面的?這是一個依賴於你僅僅觀察到的東西的問題... –

0

試試這個:

IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL 
    truncate table #idstable 
else 
    create table #idstable (id int not null) 
0

我的親愛的,

此問題是由於truncate語句。截斷用於刪除保存表的所有記錄。使用drop table而不是truncate table,這樣可以正常工作;-)

+2

這是不真實的,因爲如果它存在,我只需要截斷表,否則創建它,所以最後你肯定你有一個空的臨時表。 –