您目前已離線,請等候您的網際網路重新連線

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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

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 tempdbgoif OBJECT_ID('p_test1') is not null drop proc p_test1if OBJECT_ID('p_test2') is not null drop proc p_test2gocreate proc p_test1@s nvarchar(max)asbeginselect * from sys.objects where name = UPPER(@s)endgocreate proc p_test2@s nvarchar(100)asbeginselect * from sys.objects where name = UPPER(@s)endgo
  2. 執行下列的程式碼,以清除程序快取,並執行這兩個預存程序:
    dbcc freeproccachegoexec 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 cpcross apply sys.dm_exec_plan_attributes(cp.plan_handle) awhere cp.objtype = 'Proc'and a.attribute = 'objectid'
附註如果這種在 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 的執行個體上的預存程序的許多並行執行作業,您可能會遇到封鎖所造成編譯執行個體上的鎖定。

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

警告:本文已自動翻譯

內容

文章識別碼:2380435 - 最後檢閱時間:11/15/2010 19:27:00 - 修訂: 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
意見反應