簡短的回答是:
臨時表的隔離是保證每個查詢,並有 沒有什麼可擔心的線程,鎖或 併發訪問。
我不知道爲什麼在這裏回答說說「關係」和線程,因爲這些的意義是編程的概念,而查詢隔離在數據庫級別處理。
本地臨時對象在SQL服務器中被會話分開。如果你有兩個同時運行的查詢,那麼它們是兩個完全獨立的會話,不會互相干擾。登錄無關緊要,例如,如果您使用ADO.NET使用單個連接字符串(這意味着多個併發查詢將使用相同的SQL Server「登錄」),那麼您的查詢將全部仍在單獨的會話中運行 。連接池也無關緊要。本地臨時對象(表和存儲過程)完全不會被其他會話看到。
澄清這是如何工作的;雖然您的代碼具有本地臨時對象的單一通用名稱,但SQL Server會在每個會話中爲每個對象附加一個唯一字符串,以使它們保持分離。
CREATE TABLE #T (Col1 INT)
SELECT * FROM tempdb.sys.tables WHERE [name] LIKE N'#T%';
你會看到類似的名稱如下:您可以通過運行在SSMS下面看到這個
T_______________00000000001F
然後,而不關閉該查詢選項卡,開闢了新的查詢選項卡並粘貼到相同的查詢中並再次運行。您現在應該看到類似以下內容:
T_______________00000000001F
T_______________000000000020
因此,每個代碼引用#T時,SQL Server將其轉換爲基於會話的正確名稱。分離都是自動神奇地處理的。
如何從一個連接並行執行相同的進程? – SQLMenace 2009-01-21 21:03:11