Correcção: O plano de consulta para um procedimento armazenado não está em cache se o procedimento armazenado usa uma variável do BLOB e a variável é usada em uma função de cadeia de caracteres no Microsoft SQL Server 2008

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 2380435
Microsoft distribui correções do Microsoft SQL Server 2008 como um arquivo para download. Porque as correções são cumulativas, cada versão nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com os anteriores corrigir o SQL Server 2008 versão.
Sintomas
Considere o seguinte cenário:
  • Crie um procedimento armazenado no Microsoft SQL Server 2008.
  • O procedimento armazenado usa uma variável de objeto binário grande (BLOB).
  • O BLOB de variável é usada em uma função de cadeia de caracteres.
  • Você pode executar o procedimento armazenado.
Neste cenário, o plano de consulta para o procedimento armazenado não é armazenada em cache.
Resolução

SQL Server 2008 Service Pack 1

Pela primeira vez, o a correção para esse problema foi disponibilizado em 10 da atualização cumulativa para SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote cumulativo de atualização, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
227960410 Para o SQL Server 2008 Service Pack 1 do pacote de atualização cumulativo
Observação:Porque as compilações são lançamento de correções cumulativas, cada nova contém todos os hotfixes e todas as correções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir o lançamento. A Microsoft recomenda que você considere a aplicação a versão mais recente de correção que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
970365O SQL Server 2008 baseia-se que foram lançados após o lançamento do SQL Server 2008 Service Pack 1
Os hotfixes do Microsoft SQL Server 2008 de são criados para service packs do SQL Server específicos. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por padrão, nenhum hotfix é fornecido em um SQL Server service pack está incluído no próximo do SQL Server service pack.
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais Informações
Para reproduzir esse problema, siga estes passos:
  1. Executar o seguinte código para criar dois procedimentos armazenados ("p_test1" e "p_test2"). "P_test1" usa uma variável do BLOB e "p_test2" usa uma variável 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. Execute o seguinte código para limpar o cache de procedimento e executar os dois procedimentos armazenados:
    dbcc freeproccachegoexec p_test1 N'abc'exec p_test2 N'abc'go
  3. Execute o seguinte código para verificar se o plano armazenado em cache:
    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'
Observação:Se houver muitas execuções concorrentes desse tipo de procedimento armazenado em uma instância do Microsoft SQL Server 2008, você pode enfrentar o bloqueio que é causada por bloqueios de compilação da instância.

Para obter mais informações sobre a descrição do SQL Server de bloqueio causados por bloqueios de compilação, consulte o seguinte artigo da Base de dados de Conhecimento da Microsoft:
263889Descrição do SQL Server de bloqueio causados por compilar bloqueios
Referências
Para obter mais informações sobre as funções de cadeia de caracteres (Transact-SQL), visite o seguinte site da Microsoft:Para obter mais informações sobre o modelo de serviços incrementais para SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
935897É de 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 nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Pacotes de atualização do novo esquema para nomeação para o software do Microsoft SQL Server
Para obter mais informações sobre a terminologia da atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 2380435 - Última Revisão: 09/21/2010 20:41:00 - Revisão: 1.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

  • kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2380435 KbMtpt
Comentários