我有一個存儲過程首先檢查一個臨時表(#temp_table),如果它存在,刪除它,使用表,然後在完成後最後刪除它。當用戶做出某些事情來觸發它時,這個SP會被隨機地調用,並且很可能有時SP會在同一時間執行 - 或者有一些重疊。在MS SQL Server 2005中,當同一個SP的不同執行訪問臨時表時會發生什麼?
假設我有Exec1和Exec2兩個同樣的SP創建,修改和刪除#temp表,並且它們在毫秒內運行。
會發生什麼?執行1結束時,Exec1會鎖定#temp_table和Exec2等待嗎?對我而言,這顯然是可取的。我不希望兩個Exec1 & 2同時使用該表,也不希望Exec2失敗,因爲Exec1已經在使用該表。
[編輯]我應該只是將我的臨時錶轉換爲表變量?
因此,在我的SP中,我有'IF OBJECT_ID('tempdb ..#temp_table')不爲NULL \t DROP TABLE#temp_table' this does nothing nothing then?或者這可能會對其他執行產生不利影響? – jreed121
如果您每次從新會話中調用它(例如從Web應用程序),則不需要這樣做,因爲臨時表的範圍僅限於會話。查看我的答案以獲取更多信息。 –
你不需要像Dommer說的那樣,但是在嘗試創建它之前,它總是一個檢查OBJECT的存在的好習慣。在你的proc中保留這些代碼。 –