CORRECÇÃO: O plano de consulta para um procedimento armazenado não está em cache se o procedimento armazenado utiliza uma variável BLOB e a variável é utilizada numa função de cadeia no Microsoft SQL Server 2008 ou no Microsoft SQL Server 2008 R2

Traduções de Artigos Traduções de Artigos
Artigo: 2380435 - Ver produtos para os quais este artigo se aplica.
A Microsoft distribui o Microsoft SQL Server 2008 e o Microsoft SQL Server 2008 R2 correcções como um ficheiro transferível. Uma vez que as correcções são cumulativas, cada nova edição contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 anterior ou o SQL Server 2008 R2 corrigir lançamento.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Considere o seguinte cenário:
  • Criar um procedimento armazenado do Microsoft SQL Server 2008 ou no Microsoft SQL Server 2008 R2.
  • O procedimento armazenado utiliza uma variável de objecto grandes binários (BLOB).
  • A variável BLOB é utilizada numa função de cadeia.
  • Execute o procedimento armazenado.
Neste cenário, o plano de consulta para o procedimento armazenado não está em cache.

Resolução

Informações da atualização cumulativa

SQL Server 2008 Service Pack 1

A correcção para este problema foi publicada pela primeira vez na actualização cumulativa 10 para o SQL Server 2008 Service Pack 1. Para mais informações sobre este pacote de actualização cumulativa, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2279604Pacote de actualização cumulativa 10 para o SQL Server 2008 Service Pack 1
NotaUma vez que as compilações são cumulativas, cada nova versão de correcção contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. A Microsoft recomenda que considerem a aplicação a mais recente versão de correcção que contenha esta correcção. Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
970365O SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 correcções são criadas para service packs específicos do SQL Server. Tem de aplicar um hotfix do SQL Server 2008 Service Pack 1 para uma instalação do SQL Server 2008 Service Pack 1. Por predefinição, qualquer correcção fornecida num service pack do SQL Server está incluída no próximo service pack do SQL Server.

SQL Server 2008 Service Pack 2

A correcção para este problema disponibilizada pela primeira vez em 1 de actualizações cumulativo para o SQL Server 2008 Service Pack 2. Para mais informações sobre este pacote de actualização cumulativa, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2289254Actualização cumulativa 1 para o SQL Server 2008 Service Pack 2
NotaUma vez que as compilações são cumulativas, cada nova versão de correcção contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 anteriores corrigir lançamento. Recomendamos que considerem a aplicação a mais recente versão de correcção que contenha esta correcção. Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2402659O SQL Server 2008 cria disponibilizadas após o lançamento do SQL Server 2008 Service Pack 2

SQL Server 2008 R2

A correcção para este problema primeiro foi disponibilizada em 4 de actualização cumulativa. Para mais informações sobre como obter este pacote de actualização cumulativa para o SQL Server 2008 R2, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
2345451Pacote de actualização cumulativa 4 do SQL Server 2008 R2
NotaUma vez que as compilações são cumulativas, cada nova versão de correcção contém todas as correcções e todas as correcções de segurança que foram incluídas com o SQL Server 2008 R2 anteriores corrigir lançamento. Recomendamos que considerem a aplicação a mais recente versão de correcção que contenha esta correcção. Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
981356O SQL Server 2008 R2 cria disponibilizadas após o lançamento do SQL Server 2008 R2

Ponto Da Situação

A Microsoft confirmou que este é um problema dos produtos da Microsoft listados na secção "Aplica-se a".

Mais Informação

Para reproduzir este problema, siga estes passos:
  1. Execute o seguinte código criar dois procedimentos armazenados ("p_test1" e "p_test2"). "P_test1" utiliza uma variável BLOB e "p_test2" utiliza 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 a cache de procedimento e a 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'
    
    
NotaSe existirem várias execuções simultâneas deste tipo de procedimento armazenado no Microsoft SQL Server 2008 ou uma instância de Microsoft SQL Server 2008 R2, poderá detectar que é causado pela compilação bloqueios na instância de bloqueio.

Para mais informações sobre a descrição do SQL Server bloqueio causada por bloqueios de compilação, consulte o seguinte artigo da Microsoft Knowledge Base:
263889Descrição do SQL Server bloqueio causada por bloqueios de compilação

Referências

Para mais informações sobre funções de cadeia (Transact-SQL), visite o seguinte Web site da Microsoft:
Funções de cadeia (Transact-SQL)
Para mais informações sobre o modelo de assistência incremental para o SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
935897Um modelo de assistência incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicados
Para mais informações sobre o esquema de atribuição de nomes para as actualizações do SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
822499Nova esquema de atribuição de nomes para pacotes de actualização de software do Microsoft SQL Server
Para mais informações sobre a terminologia de actualizações de software, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 2380435 - Última revisão: 15 de novembro de 2010 - Revisão: 3.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
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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