SQL Server中的本地和全局臨時表有什麼區別?SQL Server中的本地和全局臨時表
回答
從聯機叢書報價:
本地臨時表僅在當前會話中可見;全局臨時表對所有會話均可見。當他們走出去的範圍
臨時表自動被刪除,除非使用DROP TABLE顯式刪除:
- 在存儲過程中創建的本地臨時表的存儲過程完成時自動刪除。該表可以由創建該表的存儲過程執行的任何嵌套存儲過程引用。調用創建表的存儲過程的進程無法引用該表。
- 所有其他本地臨時表在當前會話結束時自動刪除。
- 當創建表的會話結束並且所有其他任務停止引用時,全局臨時表會自動刪除。任務和表之間的關聯僅在單個Transact-SQL語句的生命週期中進行維護。這意味着在完成創建會話結束時主動引用表的最後一個Transact-SQL語句時會刪除全局臨時表。
表變量(
DECLARE @t TABLE
)僅創建它的連接是可見的,並且當所述批處理或存儲過程結束被刪除。本地臨時表(
CREATE TABLE #t
)只對創建它的 連接可見,當連接 關閉被刪除。全局臨時表(
CREATE TABLE ##t
)是給大家, 可見,當已引用它們的所有連接已經關閉被刪除。臨時數據庫永久表(
USE tempdb CREATE TABLE t
)是可見的 大家,並重新啓動服務器時被刪除。
另外值得指出的是:當創建它們的作用域關閉時,本地臨時表將被刪除。所以,如果你在一個存儲過程中創建一個本地臨時表,然後嘗試在存儲過程之外訪問它 - 它將不存在。對於Will, – 2013-04-24 03:59:29
+1。我試圖使用本地臨時表作爲優化器,我試圖使用存儲過程作爲「創建並填充,如果它不存在」初始值設定項。正如你所說,除非您使用全局臨時表,否則它不起作用。 – quillbreaker 2013-12-24 21:06:29
+1包含tempdb永久表。 – CoderDennis 2014-10-15 16:01:53
1。)本地臨時表表僅在連接期間存在,或者如果在複合語句中定義,則在複合語句的持續時間內存在。
本地臨時表僅適用於創建表的SQL Server會話或 連接(表示單個用戶)。當創建表的會話已關閉 時,會自動刪除這些 。本地臨時表名稱使用單個散列 (「#」)標誌。
CREATE TABLE #LocalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into #LocalTemp values (1, 'Name','Address');
GO
Select * from #LocalTemp
本地臨時表的範圍存在於當前 用戶的當前會話裝置與當前查詢窗口。如果您將關閉當前的 查詢窗口或打開一個新的查詢窗口,並嘗試找到上面創建的臨時表 ,它會給你錯誤。
2)全局臨時表保持永久數據庫,但只能在給定的連接存在的行。當連接關閉時,全局臨時表中的數據將消失。但是,下次打開數據庫時,表定義將保留在數據庫中以供訪問。
全局臨時表可用於所有SQL Server會話或 連接(意味着所有用戶)。這些可以由任何SQL 服務器連接用戶創建,當SQL Server連接全部關閉後,這些會自動刪除。全局臨時表 名稱使用雙重散列(「##」)符號。而本地臨時表僅當前的SQL Server 連接可見
CREATE TABLE ##GlobalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into ##GlobalTemp values (1, 'Name','Address');
GO
Select * from ##GlobalTemp
全局臨時表是所有SQL Server連接 可見。
- 1. 全局臨時表中的Microsoft SQL Server
- 2. 本地臨時表的SQL Server 2000
- 3. 錯誤在SQL Server本地臨時表
- 4. MS SQL Server - 全局臨時表的安全併發使用?
- 5. SQL Server中的會話全局臨時表
- 6. 刪除全局臨時表中的索引在SQL Server
- 7. 什麼是全局和本地臨時表在sql中的用法
- 8. 全局臨時表
- 9. 全球臨時表 - SQL Server與Oracle
- 10. pl/sql創建臨時全局表
- 11. SQL Server 2012 SSRS:使用全局臨時表創建報告
- 12. SQL Server全局臨時表在刪除後仍然存在
- 13. oracle中的全局臨時表空間
- 14. 動態SQL中的臨時表(SQL-Server)
- 15. 將本地數據插入到SQL Server臨時表中
- 16. oracle全局臨時表
- 17. 在SQL Server 2008中,是有可能禁用全局臨時表的自動降
- 18. 本地臨時表的默認鎖定粒度 - Microsoft SQL Server 2000
- 19. 從sql腳本查找全局臨時表名
- 20. 臨時表和SQL Server複製
- 21. SQL Server 2005和臨時表範圍
- 22. 使用SQL Server臨時表
- 23. 臨時表SQL Server等
- 24. SQL Server聯合臨時表
- 25. 2016年SQL Server臨時表
- 26. SQL Server 2005臨時表
- 27. 加入臨時表SQL Server
- 28. ORACLE11全局臨時表的壽命
- 29. SQL Server中的臨時表用法
- 30. 在SQL Server中的XML列臨時表
下面是一些總結這個細節,[點擊這裏](http://jayeshsorathia.blogspot.com/2012/03/beginning-sql-difference-between-local.html)使用表時 – 2012-03-28 11:52:20
要小心變量。如果您在查詢中使用它們,那麼它們可能會導致您的查詢計劃出現嚴重的性能問題,因爲它們未被編入索引。 – 2013-01-03 03:25:15
實際上,如果需要,臨時表可以編入索引,但同樣需要時間和資源,所以它仍然可能導致性能或資源問題。 – 2016-09-12 16:32:14