ИСПРАВИТЬ: План запроса для хранимой процедуры не кэшируются, если хранимая процедура использует переменную типа BLOB и переменная используется в функции строк в Microsoft SQL Server 2008 или в Microsoft SQL Server 2008 R2

BUG #: 136483 (Content Maintenance)VSTS: 542472

Корпорация Майкрософт распространяет Microsoft SQL Server 2008 и исправления Microsoft SQL Server 2008 R2 в виде одного загружаемого файла. Так как исправления являются накопительными, каждый выпуск содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 или SQL Server 2008 R2 исправления выпуска.

Проблемы

Рассмотрим следующий сценарий.

  • Создание хранимой процедуры в Microsoft SQL Server 2008 или в Microsoft SQL Server 2008 R2.

  • Хранимая процедура использует большой двоичный объект (BLOB) переменной.

  • В строке функции используется переменная BLOB.

  • Выполнение хранимой процедуры.

В этом случае план запроса для хранимой процедуры не кэшируются.

Решение

Сведения о накопительном пакете обновления

Пакет обновления 1 для SQL Server 2008

Исправление этой уязвимости первого выпуска накопительного обновления 10 для SQL Server 2008 Пакет обновления 1. Дополнительные сведения о этот накопительный пакет обновления щелкните следующий номер статьи базы знаний Майкрософт:

2279604 Накопительный пакет обновления 10 для SQL Server 2008 Пакет обновления 1Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 выпуска исправлений. Корпорация Майкрософт рекомендует учесть применение последний выпуск исправления, содержащего это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

970365 SQL Server 2008 выполняет построение, выпущенных после выпуска SQL Server 2008 Пакет обновления 1 Исправления Microsoft SQL Server 2008 создаются для определенных пакетов обновления SQL Server. Необходимо установить исправление SQL Server 2008 Пакет обновления 1 для установки SQL Server 2008 Пакет обновления 1. По умолчанию какие-либо исправления, включенный в пакет обновления SQL Server включено в следующий пакет обновления SQL Server.

Пакет обновления 2 для SQL Server 2008

Исправление этой уязвимости первого выпуска накопительного обновления 1 для SQL Server 2008 Пакет обновления 2. Дополнительные сведения о этот накопительный пакет обновления щелкните следующий номер статьи базы знаний Майкрософт:

2289254 Накопительное обновление 1 для SQL Server 2008 Пакет обновления 2Примечание. Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2008 выпуска исправлений. Мы рекомендуем рассмотреть применение последнего выпуска исправления, содержащего это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

2402659 SQL Server 2008 выполняет построение, выпущенных после выпуска SQL Server 2008 Пакет обновления 2

SQL Server 2008 R2

Исправление, устраняющее эту проблему, сначала было выпущено в накопительное обновление 4. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 щелкните следующий номер статьи базы знаний Майкрософт:

2345451 Накопительное обновление 4 для SQL Server 2008 R2 Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправлений содержит все исправления, входившие в состав предыдущих выпусков исправлений SQL Server 2008 R2 . Мы рекомендуем рассмотреть применение последнего выпуска исправления, содержащего это исправление. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:

981356 Сборки SQL Server 2008 R2, которые были выпущены после выпуска SQL Server 2008 R2

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Дополнительная информация

Чтобы воспроизвести данную проблему, выполните следующие действия:

  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 R2 или Microsoft SQL Server 2008, могут возникнуть блокировки, может быть вызвано компиляции блокировок в экземпляре. Дополнительные сведения об описании блокировки вызвано компиляции блокировок SQL Server обратитесь к следующей статье Microsoft Knowledge Base:

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

Ссылки

Дополнительные сведения о строковых функций (Transact-SQL) посетите следующий веб-узел корпорации Майкрософт:

Строковые функции (Transact-SQL)Дополнительные сведения о добавочных модель обслуживания для SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

935897 Модель обслуживания изменений, используемая рабочей группой SQL Server, предоставляет модель ISM для распространения исправлений обнаруженных проблемДополнительные сведения о схеме именования для обновления SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

822499Новая схема присвоения имен пакетам обновлений программного обеспечения Microsoft SQL ServerДля получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Author: sharxu
Writer: v-yipli
Tech Reviewer: amitban;sharxu;sqlprev
Editor:v-edcork

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

×