成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2000表變量引入時的問題破解

數據庫 SQL Server
本文主要向你介紹的是SQL Server 2000表變量引入的一些常見問題 (FAQ) 做出的正確解答,我們主要是以一問一答的方式對其進行說明。

 

本文主要是對一些與SQL Server 2000表變量引入的一些常見問題 (FAQ) 做出的解答。要閱讀表變量的 SQL Server 數據庫的聯機叢書說明,你可以通過以下的這些Microsoft 網站,如下所示:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ta-tz_7ysl.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ta-tz_7ysl.asp)更多信息

 

問題 1:為什么在已經有了臨時表的情況下還要引入SQL Server 2000表變量?

 

解答 1:與臨時表相比,表變量具有下列優點: 如 SQL Server 聯機叢書“表”(Table) 一文中所述,表變量(如局部變量)具有明確定義的范圍,在該范圍結束時會自動清除這些表變量。

與臨時表相比,表變量導致存儲過程的重新編譯更少。

 

涉及表變量的事務僅維持表變量上更新的持續時間。因此,使用SQL Server 2000表變量時,需要鎖定和記錄資源的情況更少。因為表變量具有有限的范圍并且不是持久性數據庫的一部分,所以事務回滾并不影響它們。

 

問題 2:如果說使用表變量比使用臨時表導致存儲過程的重新編譯更少,這意味著什么?

 

解答 2:下面的文章討論了重新編譯存儲過程的一些原因:

243586 (http://support.microsoft.com/kb/243586/) 存儲過程重新編譯的疑難解答“由于某些臨時表操作引起的重新編譯”一節還列出了為避免一些問題(例如使用臨時表導致重新編譯)而需要滿足的一些要求。這些限制不適用于表變量。

表變量完全獨立于創建這些表變量的批,因此,當執行 Create 或 Alter 語句時,不會發生“重新解析”,而在使用臨時表時可能會發生“重新解析”。臨時表需要此“重新解析”,以便從嵌套存儲過程引用該表。表變量完全避免了此問題,因此存儲過程可以使用已編譯的計劃,從而節省了處理存儲過程的資源。

問題 3:表變量有哪些缺陷?

解答 3:與臨時表相比,它存在下列缺陷: 在表變量上不能創建非聚集索引(為 PRIMARY 或 UNIQUE 約束創建的系統索引除外)。與具有非聚集索引的臨時表相比,這可能會影響查詢性能。

表變量不像臨時表那樣可以維護統計信息。在SQL Server 2000表變量上,不能通過自動創建或使用 Create STATISTICS 語句來創建統計信息。因此,在大表上進行復雜查詢時,缺少統計信息可能會妨礙優化器確定查詢的***計劃,從而影響該查詢的性能。

 

在初始 DECLARE 語句后不能更改表定義。

 

表變量不能在 Insert EXEC 或 Select INTO 語句中使用。

 

表類型聲明中的檢查約束、默認值以及計算所得的列不能調用用戶定義的函數。

 

如果表變量是在 EXEC 語句或 sp_executesql 存儲過程外創建的,則不能使用 EXEC 語句或 sp_executesql 存儲過程來運行引用該表變量的動態 SQL Server 查詢。由于表變量只能在它們的本地作用域中引用,因此 EXEC 語句和 sp_executesql 存儲過程將在SQL Server 2000表變量的作用域之外。

但是,您可以在 EXEC 語句或 sp_executesql 存儲過程內創建表變量并執行所有處理,因為這樣表變量本地作用域將位于 EXEC 語句或 sp_executesql 存儲過程中。

 

問題 4:與臨時表或***表相比,表變量的僅存在于內存中的結構保證了更好的性能,是否因為它們是在駐留在物理磁盤上的數據庫中維護的?

 

解答 4:表變量不是僅存在于內存中的結構。由于表變量可能保留的數據較多,內存中容納不下,因此它必須在磁盤上有一個位置來存儲數據。與臨時表類似,表變量是在 tempdb 數據庫中創建的。如果有足夠的內存,則表變量和臨時表都在內存(數據緩存)中創建和處理。

問題 5:必須使用SQL Server 2000表變量來代替臨時表嗎?

解答 5:答案取決于以下三個因素: 插入到表中的行數。

從中保存查詢的重新編譯的次數。

 

查詢類型及其對性能的指數和統計信息的依賴性。

 

在某些情況下,可將一個具有臨時表的存儲過程拆分為多個較小的存儲過程,以便在較小的單元上進行重新編譯。

 

通常情況下,應盡量使用SQL Server 2000表變量,除非數據量非常大并且需要重復使用表。在這種情況下,可以在臨時表上創建索引以提高查詢性能。但是,各種方案可能互不相同。Microsoft 建議您做一個測試,來驗證表變量對于特定的查詢或存儲過程是否比臨時表更有效。

如果您沒有看到您問題的答案,請訪問 Microsoft SQL Server 新聞組,地址是:Microsoft SQL Server 新聞組 (http://support.microsoft.com/newsgroups/)

如果您想對本文或其他 Microsoft SQL Server 知識庫文章發表評論,請給我們發郵件,地址是SQLKB@Microsoft.comhttp://support.microsoft.com/?kbid=305977

【編輯推薦】

  1. SQL Server臨時表的使用方案大全
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. SQL Server 使用索引來對數據訪問進行優化
  5. SQL Server浮點數據類型的詳細解析
責任編輯:佚名 來源: 中國網管聯盟
相關推薦

2010-07-26 14:09:32

SQL Server

2010-07-26 13:33:28

SQL Server

2010-07-01 17:08:26

2010-06-18 09:26:49

SQL Server

2010-07-02 10:42:11

SQL Server

2009-05-26 10:21:07

2011-04-06 13:14:29

SQL Server 安裝

2010-07-22 16:02:29

2010-07-23 09:15:08

安裝SQL Serve

2010-07-26 13:25:11

SQL Server分

2010-09-16 15:10:48

SQL Server表

2011-03-29 13:22:07

SQL Server臨時表表變量

2010-07-23 09:44:51

2021-01-18 05:23:14

SQL 排序Server

2010-06-18 11:04:39

SQL Server

2010-11-10 15:23:55

SQL SERVER

2010-07-15 10:48:48

SQL Server2

2010-07-05 14:11:07

SQL Server

2010-07-16 13:14:39

SQL Server

2011-04-13 14:20:52

SQL Server主鍵
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 欧美日韩午夜精品 | 欧美日韩一区二区三区四区五区 | 成人在线h | 一级毛片观看 | 中文字幕1区2区 | 女人牲交视频一级毛片 | 成人在线中文字幕 | 中文字幕1区| 懂色中文一区二区在线播放 | 亚洲国产精品久久久久 | 国产精品s色 | 黄色国产在线视频 | 天天天天操 | 电影91久久久 | 人成在线| 精品福利在线 | 久久久久久综合 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩精品中文字幕 | 色综合视频 | 亚洲精品中文在线 | 神马影院一区二区三区 | 国产一区二区三区久久久久久久久 | 日本久久精品 | 久草视频网站 | 日韩一级免费大片 | 中文字幕视频在线观看 | 免费av直接看 | 国产高清一区二区三区 | 福利视频一区二区三区 | 国产真实精品久久二三区 | 在线观看国产精品视频 | 欧美午夜在线 | 日本三级电影免费 | 欧美一区二区三区在线看 | 久久精彩视频 | 国产一区二区在线免费观看 | 91porn国产成人福利 | 国产精品视频一二三区 | 国产精品美女视频 |