2012-12-18 93 views
0

我在存儲過程中有一個臨時表導致查詢超時,因爲它正在做一個複雜的計算。我想在使用它之後放棄它。它像存儲過程臨時表導致超時錯誤

DECLARE @SecondTable TABLE 

創造了現在,我可以使用

drop @SecondTable 

其實我不得不使用

drop #SecondTable 

是否有人知道爲什麼不降呢?

回答

3

我決不是一個SQL大師,但爲什麼這個下降甚至是必要的?

如果它是一個表變量,一旦存儲過程退出,它將不再存在。

我真的很驚訝,DROP #SecondTable不會錯誤在你身上;因爲你在那裏放置臨時表;不是表變量。

編輯

所以根據您的意見,我更新如下:

1)如果你使用一個表變量(@SecondTable);那麼不需要下降。 SQL Server將爲您處理此問題。

2.)聽起來你的超時是由使用表的計算引起的,而不是表本身的丟失。在這種情況下;我可能會推薦使用臨時表而不是表變量;因爲臨時表會讓你添加索引等來提高性能;而一個表變量不會。如果這還不夠,您可能需要增加查詢的超時時間。

3.)在SQL中;一個表變量(@SecondTable)和臨時表(#SecondTable)是兩個完全不同的東西。我會參考Table VariablesTemporary Tables

+0

的MSDN文檔,它會在存儲過程之後被刪除。然而,在商店proc本身多次使用臨時表導致超時。我的問題與Drop #SecondTable和Drop @SecondTable的區別是什麼?我沒有得到你正在做什麼的臨時變量.. – hussian