FIX: 預存程序的查詢計劃不會快取如果預存程序會使用 BLOB 變數,而變數用來在字串函式在 Microsoft SQL Server 2008 中,或在 Microsoft SQL Server 2008 R2

文章翻譯 文章翻譯
文章編號: 2380435 - 檢視此文章適用的產品。
Microsoft 將分配 Microsoft SQL Server 2008,Microsoft SQL Server 2008 R2 修正為一個可下載的檔案。 此修正程式是累積的因為每個新版本都包含所有 Hotfix 和先前的 SQL Server 2008 或 SQL Server 2008 R2 隨附所有安全性修正程式都修正版本。
全部展開 | 全部摺疊

在此頁中

徵狀

考慮下列案例::
  • 在 Microsoft SQL Server 2008 中,或在 Microsoft SQL Server 2008 R2 中,您可以建立預存程序。
  • 預存程序會使用二進位大型物件 (BLOB) 變數。
  • BLOB 變數是用來在字串函式。
  • 在執行預存程序。
在此的情況下查詢計劃,預存程序不會快取。

解決方案

累積更新資訊

SQL Server 2008 Service Pack 1

累積更新 10 的 SQL Server 2008 的 Service Pack 1 於第一次發行此問題的修正程式。 關於這個累積更新套件的詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2279604SQL Server 2008 的 Service Pack 1 的累積更新套件 10
附註因為組建是累積,每一個新版的修正程式會包含所有 Hotfix 和先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。 Microsoft 建議您考慮套用最新的修正版本包含此 Hotfix。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件::
970365SQL Server 2008 建置 SQL Server 2008 的 Service Pack 1 發行之後所發行的
Microsoft SQL Server 2008 的 Hotfix 會建立特定的 SQL Server Service Pack。 您必須將 SQL Server 2008 的 Service Pack 1 Hotfix 套用至 SQL Server 2008 的 Service Pack 1 的安裝。 預設狀況下,SQL Server 服務套件中提供的任何 Hotfix 包含在下一個 SQL Server Service Pack。

SQL Server 2008 Service Pack 2

累積更新 1 中第一次發行此問題的修正程式的 SQL Server 2008 的 Service Pack 2。 關於這個累積更新套件的詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2289254累積更新 1 的 SQL Server 2008 的 Service Pack 2
附註因為組建是累積,每一個新版的修正程式會包含所有 Hotfix 和先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。 我們建議您考慮套用最新的修正版本包含此 Hotfix。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件::
2402659SQL Server 2008 建置 SQL Server 2008 的 Service Pack 2 發行之後所發行的

SQL Server 2008 R2

累積更新 4 於第一次發行此問題的修正程式。 如需有關如何取得這個累積更新套件的 SQL Server 2008 R2 按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2345451SQL Server 2008 R2 的累積性的更新套件 4
附註因為組建是累積,每一個新版的修正程式會包含所有 Hotfix 和先前的 SQL Server 2008 R2 隨附所有安全性修正程式都修正版本。 我們建議您考慮套用最新的修正版本包含此 Hotfix。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件::
981356SQL Server 2008 R2 建置 SQL Server 2008 R2 發行之後所發行的

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。。

其他相關資訊

重現這個問題,請依照下列步驟執行:
  1. 執行下列的程式碼如果要建立兩個預存程序 (p_test1"和"p_test2 」)。 P_test1 」 使用一個 BLOB] 變數和 p_test2 」 使用 nvarchar(100) 變數。
    use tempdb
    go
    if OBJECT_ID('p_test1') is not null drop proc p_test1
    if OBJECT_ID('p_test2') is not null drop proc p_test2
    go
    create proc p_test1
    @s nvarchar(max)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    create proc p_test2
    @s nvarchar(100)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    
  2. 執行下列的程式碼,以清除程序快取,並執行這兩個預存程序:
    dbcc freeproccache
    go
    exec p_test1 N'abc'
    exec p_test2 N'abc'
    go
    
  3. 執行下列的程式碼,以檢查快取的計劃:
    select object_name(CONVERT(int, a.value)), cp.*
    from sys.dm_exec_cached_plans cp
    cross apply sys.dm_exec_plan_attributes(cp.plan_handle) a
    where cp.objtype = 'Proc'
    and a.attribute = 'objectid'
    
    
附註如果這種在 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 的執行個體上的預存程序的許多並行執行作業,您可能會遇到封鎖所造成編譯執行個體上的鎖定。

如需有關 SQL Server 封鎖因編譯鎖定的說明,請參閱下列的 「 Microsoft 知識庫 」 文件:
263889SQL Server 會封鎖因編譯鎖定的描述

?考

字串函數 (Transact-SQL) 有關的詳細資訊,請造訪下列 Microsoft 網站:
字串函數 (Transact-SQL)
SQL Server 的累加式的服務模型相關資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
935897累加式的服務模型是可用來傳遞回報問題的 Hotfix SQL Server 小組
如需有關 SQL Server 更新命名的結構描述按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
822499Microsoft SQL Server 軟體更新套件的新命名的結構描述
有關軟體更新術語的詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
824684用來描述 Microsoft 軟體更新標準術語的描述

屬性

文章編號: 2380435 - 上次校閱: 2010年11月15日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Standard Edition for Small Business
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Workgroup
關鍵字:?
kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2380435 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:2380435
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com