КОРЕКЦИЯ: План за заявки за съхранена процедура не е кеширан, ако съхранена процедура използва BLOB променлива и променлива се използва при низ функция в Microsoft SQL Server 2008 или Microsoft SQL Server 2008 R2

Microsoft разпространява Microsoft SQL Server 2008 и Microsoft SQL Server 2008 R2 се определя като един файл за изтегляне. Тъй като корекциите са сборни, всяка нова версия съдържа всички актуални корекции и всички корекции на защитата, които са били включени в предишните SQL Server 2008 и SQL Server 2008 R2 fix съобщение.

Симптоми

Да разгледаме следния сценарий:

  • Създавате съхранена процедура в 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:

2279604 Сборния пакет за актуализация 10 за SQL Server 2008 Service Pack 1Забележка Тъй като компилациите са сборни, всяка нова версия на корекцията съдържа всички актуални корекции и всички корекции на защитата, които са били включени в предишните SQL Server 2008 fix съобщение. Microsoft препоръчва е да приложите най-новата версия на корекцията, който ще съдържа тази корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:

970365 Компилации на SQL Server 2008, издадени след SQL Server 2008 Service Pack 1 Microsoft SQL Server 2008 корекции се създават специфични сервизни пакети за SQL Server. Трябва да приложите SQL Server 2008 Service Pack 1 корекция към инсталацията на SQL Server 2008 Service Pack 1. По подразбиране всяка корекция в сервизен пакет на SQL Server е включена в следващия сервизен пакет за SQL Server.

SQL Server 2008 Service Pack 2

Решение за този проблем излезе първо в сборна актуализация 1 за SQL Server 2008 Service Pack 2. За повече информация относно този пакет със сборни актуализации щракнете върху следния номер на статия в базата знания на Microsoft:

2289254 Сборна актуализация 1 за SQL Server 2008 Service Pack 2Забележка Тъй като компилациите са сборни, всяка нова версия на корекцията съдържа всички актуални корекции и всички корекции на защитата, които са били включени в предишните SQL Server 2008 fix съобщение. Препоръчително е да приложите най-новата версия на корекцията, който ще съдържа тази корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:

2402659 Компилации на SQL Server 2008, издадени след SQL Server 2008 Service Pack 2

SQL Server 2008 R2

Решение за този проблем излезе първо в сборна актуализация 4. За повече информация как да получите този Сборен пакет за SQL Server 2008 R2, щракнете върху следния номер на статия в базата знания на Microsoft:

2345451 Кумулативен пакет за актуализация 4 за SQL Server 2008 R2 Забележка Тъй като компилациите са сборни, всяка нова версия на корекцията съдържа всички актуални корекции и всички корекции на защитата, които са били включени в предишните SQL Server 2008 R2 fix съобщение. Препоръчително е да приложите най-новата версия на корекцията, който ще съдържа тази корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:

981356 SQL 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 блокиране, причинени от компилация locks вижте следната статия в базата знания на Microsoft:

263889 Описание на SQL Server блокиране, причинени от компилация заключване

Препратки

За повече информация относно функциите за низ (Transact-SQL) посетете следния уеб сайт на Microsoft:

Функции за низове (Transact-SQL)За повече информация за модела на постъпково обслужване за SQL Server щракнете върху следния номер на статия в базата знания на Microsoft:

935897 Моделът за постъпково обслужване се предлага от екипа на SQL Server за предоставяне на спешни корекции за съобщени проблемиЗа повече информация за схемата за именуване на актуализации за SQL Server щракнете върху следния номер на статия в базата знания на Microsoft:

822499Нова схема за именуване на пакети за актуализация на софтуера на Microsoft SQL ServerЗа повече информация относно терминологията за актуализация на софтуера щракнете върху следния номер на статия, за да я видите в базата данни на Microsoft:

824684 Описание на стандартната терминология, използвана за описание на софтуерните актуализации на Microsoft

Нуждаете се от още помощ?

Разширете уменията си
Преглед на обучението
Получавайте първи новите функции
Присъединете се към Microsoft приобщени

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×