Корпорация Майкрософт распространяет 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
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Чтобы воспроизвести данную проблему, выполните следующие действия:
-
Выполните следующий код для создания двух хранимых процедур («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
-
Выполните следующий код для очистки кэша процедур и выполнение этих двух хранимых процедур:dbcc freeproccachegoexec p_test1 N'abc'exec p_test2 N'abc'go
-
Выполните следующий код для проверки кэшированного плана: 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 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт