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

Traduções deste artigo Traduções deste artigo
ID do artigo: 2380435 - Exibir os produtos aos quais esse artigo se aplica.
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.
Expandir tudo | Recolher tudo

Neste artigo

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 tempdb
    go
    if OBJECT_ID('p_test1') is not null drop proc p_test1
    if OBJECT_ID('p_test2') is not null drop proc p_test2
    go
    create proc p_test1
    @s nvarchar(max)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    create proc p_test2
    @s nvarchar(100)
    as
    begin
    select * from sys.objects 
    where name = UPPER(@s)
    end
    go
    
  2. Execute o seguinte código para limpar o cache de procedimento e executar os dois procedimentos armazenados:
    dbcc freeproccache
    go
    exec 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 cp
    cross apply sys.dm_exec_plan_attributes(cp.plan_handle) a
    where 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:
Funções de cadeia de caracteres (Transact-SQL)
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

Propriedades

ID do artigo: 2380435 - Última revisão: terça-feira, 21 de setembro de 2010 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2380435 KbMtpt
Tradução automática
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

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com