A Microsoft distribui as correções do Microsoft SQL Server 2008 e do Microsoft SQL Server 2008 R2 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 ou SQL Server 2008 R2 corrigir lançamento.
Sintomas
Considere o seguinte cenário:
- Criar um procedimento armazenado no Microsoft SQL Server 2008 ou no Microsoft SQL Server 2008 R2.
- O procedimento armazenado usa uma variável de objeto binário grande (BLOB).
- A variável BLOB é usada em uma função de cadeia de caracteres.
- Executa o procedimento armazenado.
Nesse cenário, o plano de consulta para o procedimento armazenado não é armazenado em cache.
Resolução
Informações sobre a atualização cumulativa
SQL Server 2008 Service Pack 1
A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 10 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre este pacote de atualização cumulativa, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
2279604 Pacote de atualizações cumulativas 10 para SQL Server 2008 Service Pack 1Nota Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento. A Microsoft recomenda que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo da Base de Dados de Conhecimento Microsoft:
970365 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 1 Os hotfixes do Microsoft SQL Server 2008 são criados para service packs SQL Server específicos. Tem de aplicar uma correção do SQL Server 2008 Service Pack 1 a uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecido em um SQL Server service pack é incluído no próximo SQL Server service pack.
SQL Server 2008 Service Pack 2
A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 1 para o SQL Server 2008 Service Pack 2. Para obter mais informações sobre este pacote de atualização cumulativa, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
2289254 Atualização cumulativa 1 para SQL Server 2008 Service Pack 2Nota Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 corrigir lançamento. Recomendamos que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo da Base de Dados de Conhecimento Microsoft:
2402659 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 2
SQL Server 2008 R2
A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 4. Para obter mais informações sobre como obter este pacote de atualização cumulativa para o SQL Server 2008 R2, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
2345451 pacote de atualizações cumulativas 4 para SQL Server 2008 R2 Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior SQL Server 2008 R2 corrigir lançamento. Recomendamos que você considere aplicar o lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo da Base de Dados de Conhecimento Microsoft:
981356 As compilações do SQL Server 2008 R2 lançadas após o SQL Server 2008 R2
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais informações
Para reproduzir este problema, siga estes passos:
Execute o seguinte código para criar dois procedimentos armazenados ("p_test1" e "p_test2"). "P_test1" usa uma variável BLOB e "p_test2" usa uma variável nvarchar(100).use tempdb
vá
se OBJECT_ID('p_test1') não for null drop proc p_test1
Se OBJECT_ID('p_test2') não for null drop proc p_test2
vá
criar p_test1 proc
@s nvarchar(máx.)
como
começar
Selecione * de sys.objects
where name = MAIÚSCULAS(@s)
fim
vá
criar p_test2 proc
@s nvarchar(100)
como
começar
Selecione * de sys.objects
where name = MAIÚSCULAS(@s)
fim
váExecute o código a seguir para limpar o cache de procedimento e executar os dois procedimentos armazenados:dbcc freeproccache
vá
exec p_test1 N'abc'
exec p_test2 N'abc'
váExecute o seguinte código para marcar o plano armazenado em cache: selecione object_name(CONVERT(int, a.value)), cp.*
a partir de sys.dm_exec_cached_plans cp
aplicação cruzada sys.dm_exec_plan_attributes(cp.plan_handle) a
onde cp.objtype = 'Proc'
e a.attribute = 'objectid'
Observação Se houver muitas execuções simultâneas desse tipo de procedimento armazenado em uma instância do Microsoft SQL Server 2008 ou do Microsoft SQL Server 2008 R2, você poderá enfrentar bloqueios causados por bloqueios de compilação na instância.
Para obter mais informações sobre a descrição do bloqueio de SQL Server causado por bloqueios de compilação, consulte o seguinte artigo da Base de Dados de Conhecimento Microsoft:
263889 Descrição do bloqueio de SQL Server causado por bloqueios de compilação
Referências
Para obter mais informações sobre funções de cadeia de caracteres (Transact-SQL), visite o seguinte site da Microsoft:
Funções de cadeia de caracteres (Transact-SQL) Para obter mais informações sobre o modelo de manutenção incremental para SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
935897 Um modelo de serviços incrementais disponível da equipe do SQL Server para fornecer hotfixes para problemas relatados
Para obter mais informações sobre o esquema de nomenclatura para atualizações SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499 Novo esquema de nomenclatura para pacotes de atualização de software do Microsoft SQL Server Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684 Descrição da terminologia padrão usada para descrever as atualizações de software da Microsoft