SQL Server 中臨時表的範圍
使用 SQL Server 時,了解臨時表的範圍對於防止資料損壞至關重要。本文探討了多用戶環境中有關臨時表共享的誤解,並闡明了 EXEC 在創建新作用域中的作用。
臨時表作用域
與聲明相反由於臨時表是共享的,SQL Server 確保並發導入操作的隔離。如微軟文件所述:
範圍EXEC
每次呼叫EXEC 都會建立一個新作用域。這意味著在預存程序中建立的臨時表對於同時執行的其他預存程序不可見。
考慮提供的範例:
CREATE PROC [dbo].[ImportCompany] ( @CompanyId AS INTEGER ) AS EXEC [dbo].[ImportAddress] @CompanyId = @CompanyId --Import other data CREATE PROC [dbo].[ImportAddress] ( @CompanyId AS INTEGER ) AS CREATE TABLE #Companies (OldAddress NVARCHAR(128), NewAddress NVARCHAR(128)) INSERT INTO #Companies(OldAddress, NewAddress) SELECT Address as OldAddress, 'Transformed ' + Address as NewAddress FROM [OldDb].[dbo].[Addresses] WHERE CompanyId = @CompanyId --Do stuff with the transformed data DROP TABLE #Companies EXEC [dbo].[ImportCompany] @CompanyId = 12345
在這種情況下,#Companies 表是在ImportAddress 過程結束時自動刪除,確保沒有並發導入操作可以存取或損壞
結論
SQL Server中的臨時表的範圍僅限於目前會話,且不能在並發匯入之間共用。每次呼叫 EXEC 都會建立一個新作用域,確保隔離並防止資料損壞。因此,在這種情況下,不需要使用表變數來維護資料完整性。
以上是SQL Server如何保證並發程序中暫存資料表的隔離?的詳細內容。更多資訊請關注PHP中文網其他相關文章!