我讀過關於臨時表,全局臨時表和表變量的信息。我理解它,但無法想象當我必須使用它時的一個條件。請詳細說明我應該何時使用臨時表。何時使用SQL Server 2005中的臨時表
11
A
回答
12
使用臨時表最常見的情況是來自存儲過程。
如果在存儲過程中存在涉及操作無法在單個查詢中完成的數據的邏輯,那麼在這種情況下,可以將一個查詢/中間結果的輸出存儲在臨時表中,該臨時表然後參與通過連接等進一步操作來實現最終結果。
一個在使用臨時表常見的情形是存儲SELECT INTO語句的結果
表變量是相對較新的(在SQL Server 2005中引入的 - 只要我還記得)可以代替使用臨時表中最例。兩者之間的一些分歧進行了討論here
在很多情況下,尤其是在OLTP應用程序,你的程序內的臨時表的使用意味着你MAY可能有業務處理邏輯數據庫和可能是一個考慮因素您可以重新審視您的設計 - 特別是在n層系統的應用程序中具有單獨的業務層的情況下。
9
三者之間的主要區別在於生命和範圍。
通過一張全球表格,我假設你的意思是一個標準的磨機表格。表格用於存儲持久性數據。所有登錄用戶都可以訪問它們。您所做的任何更改對其他用戶都可見,反之亦然。
臨時表僅用於在會話中存儲數據。使用臨時表的最佳時機是當您需要在SQL服務器中存儲信息以用於多個SQL事務時。與普通表一樣,您將創建它並與之交互(插入/更新/刪除),當完成時,您將放棄它。表和臨時表之間有兩點區別。
- 臨時表只對您可見。即使其他人創建了一個具有相同名稱的臨時表,其他人也無法看到或影響臨時表。
- 只要您登錄,臨時表就存在,除非您明確地刪除它。如果您註銷或斷開連接,SQL Server將自動爲您清理它。這也意味着數據不是持久的。如果您在一個會話中創建臨時表並註銷,則在您重新登錄時它不會存在。
表變量的工作方式與SQL Server中的任何變量一樣。這用於存儲用於單個事務的數據。這是TSQL的一個相對較新的功能,通常用於在過程之間傳遞數據 - 例如傳遞數組。表格和表格變量之間有三點區別。
- 像臨時表一樣,它只對您可見。
- 因爲它是一個變量,所以它可以在存儲過程之間傳遞。
- 臨時表只存在於當前事務中。一旦SQL Server完成一個事務(使用GO或END TRANSACTION語句)或超出範圍,它將被釋放。
我個人避免使用臨時表和表變量,原因有幾個。首先,它們的語法是Microsoft特定的。如果您的程序要與多個RDBMS進行交互,請不要使用它們。此外,臨時表和表變量有增加某些SQL查詢複雜性的傾向。如果你的代碼可以使用更簡單的方法完成,我建議使用簡單的方法。
相關問題
- 1. SQL Server 2005臨時表
- 2. SQL Server 2005和臨時表範圍
- 3. 使用SQL Server臨時表
- 4. SQL Server 2005 - 在多用戶環境中使用臨時表
- 5. sql 2005中的臨時表和事務
- 6. SQL 2005 - 臨時表問題
- 7. sql server 2005使用xml參數創建臨時表
- 8. SQL Server 2005中的臨時表不會自動丟失
- 9. SQL Server中的臨時表用法
- 10. 動態SQL中的臨時表(SQL-Server)
- 11. 在SQL Server 2005中輸出到臨時表
- 12. 臨時表FOR XML AUTO,ELEMENTS - SQL Server 2005中
- 13. SQL Server 2005:臨時禁用觸發器的T-SQL
- 14. 從多個表中選擇行時使用sql server臨時表
- 15. 臨時表SQL Server等
- 16. SQL Server聯合臨時表
- 17. 2016年SQL Server臨時表
- 18. 加入臨時表SQL Server
- 19. 如何從c#中的sql server 2005中的datagridview記錄創建臨時表#
- 20. 如何在SQL中使用臨時表
- 21. 在SQL Server中的XML列臨時表
- 22. 全局臨時表中的Microsoft SQL Server
- 23. SQL Server中臨時表的問題
- 24. 如何使用SQL Server中的Create語句創建臨時表?
- 25. 從SQL Server中的臨時表創建臨時視圖
- 26. 臨時表和表變量之間的區別在SQL 2005中
- 27. Microsoft SQL Server 2005檢查臨時表是否空
- 28. 在SQL Server 2005中超時
- 29. SQL Server:如何插入臨時表? ?
- 30. 在SQL Server 2008中使用動態sql構建臨時表