2011-04-13 96 views
88

我在腳本中有一個表變量(不是存儲過程)。兩個問題:如何在SQL-Server中刪除表變量?我應該甚至這樣做嗎?

  1. 如何刪除表變量? Drop Table @varName給出「錯誤的snytax」錯誤。
  2. 我應該一直這樣做嗎?我聽說這是一個很好的做法。這樣的小腳本真的有必要嗎?

這裏是我的代碼:

Declare @projectList table(
    name varchar(40) NOT NULL); 

Insert Into @projectList 
Values ('BCR-00021') 

Select * 
From @projectList 

Drop Table @projectList -- does not work 
+0

你無法自己刪除他們,所以你的問題的第二部分不適用。 – 2011-04-13 18:02:37

回答

136

表變量是自動的本地和自動刪除 - 您不必擔心。

+14

+1 - 即使你願意,你也不能**放棄它們 - 只要會話是開放的,就像其他變量一樣,它們會持續存在。它們也不受交易的影響。 – JNK 2011-04-13 18:04:30

+8

@JNKs指出它們不受事務影響很重要,您可以使用表變量來保存數據並在錯誤導致回滾後寫入日誌表。 – HLGEM 2011-04-13 18:08:15

+0

很酷,有效。這對#tempTables是否一樣? – jtpereyda 2011-04-13 18:39:00

27

表變量就像int或varchar變量一樣。

你不需要放下它們。它們與int或varchar變量具有相同的scope規則

變量的範圍是可引用該變量的Transact-SQL語句的範圍。變量的作用域從聲明的地方持續到聲明的批處理或存儲過程結束。

3

就像TempTables一樣,本地表變量也在TempDB中創建。表變量的範圍是它聲明的批處理,存儲過程和語句塊。它們可以作爲過程之間的參數傳遞。當您關閉創建它們的會話時,它們會自動丟棄。

+0

#temp表不是與@table變量相同,它在修補程序或範圍結束後不會自動刪除,只有在存儲過程內部創建並且存儲過程完成執行時纔會自動刪除 – 2017-10-18 18:52:04

3

但是你們都忘了提及,如果在一個循環內使用一個變量表,它將需要在循環內再次加載數據之前清空(刪除@table)。

3

如果別人遇到這個......你真的需要放棄它像,而在一個循環中,你可以從表變量全部刪除:

DELETE FROM @tableVariableName 
相關問題