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

BUG #: 136483 (Content Maintenance)VSTS: 542472

A Microsoft distribui Microsoft SQL Server 2008 e Microsoft SQL Server 2008 R2 correcções como um ficheiro para transferência. Uma vez que as correcções são cumulativas, cada nova versão inclui todas as correcções e correcção de todas as correcções de segurança que foram incluídas com o SQL Server 2008 ou o SQL Server 2008 R2 anterior.

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 objectos grandes binários (BLOBS).

  • 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 de actualização cumulativa

SQL Server 2008 Service Pack 1

A correcção deste problema primeiro foi disponibilizada em 10 de actualização cumulativa 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:

2279604 Pacote de actualização cumulativa 10 para SQL Server 2008 Service Pack 1Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008. A Microsoft recomenda que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

970365 Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008 Service Pack 1 Correcções do Microsoft SQL Server 2008 são criadas para service packs do SQL Server específicos. Tem de aplicar uma correcção 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 deste problema publicada pela primeira vez em 1 de actualização cumulativa 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:

2289254 Actualização cumulativa 1 para o SQL Server 2008 Service Pack 2Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas no anterior do SQL Server 2008. Recomendamos que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2402659 Cria o SQL Server 2008 que foram disponibilizadas após o lançamento do SQL Server 2008 Service Pack 2

SQL Server 2008 R2

A correcção para este problema foi primeiro 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:

2345451 Pacote de actualizações cumulativo 4 para o SQL Server 2008 R2 Nota Uma vez que as compilações são cumulativas, cada edição contém todas as correcções e correcção de todas as correcções de segurança que foram incluídas com o SQL Server 2008 R2 anterior. Recomendamos que pense em aplicar a edição de correcção mais recente que contenha esta correcção. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

981356 Cria o SQL Server 2008 R2 que foram disponibilizadas após o lançamento do SQL Server 2008 R2

Estado

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

Mais Informações

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 de 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 a cache de processo 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 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'

Nota Se existirem várias execuções simultâneas deste tipo de procedimento armazenado no Microsoft SQL Server 2008 ou uma instância do Microsoft SQL Server 2008 R2, poderá detectar que é causado por compilação bloqueios na instância de bloqueio. Para mais informações sobre a descrição da causada por bloqueios de compilação de bloqueio de SQL Server, consulte o seguinte artigo na Microsoft Knowledge Base:

263889 Descrição de bloqueio do SQL Server causados 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:

935897 Um modelo de Assistência Incremental está disponível a partir da equipa do SQL Server para proporcionar correcções para problemas comunicadosPara mais informações sobre o esquema de atribuição para actualizações do SQL Server, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:

822499Novo esquema de atribuição de nomes para pacotes de actualização de software do Microsoft SQL ServerPara mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:

824684Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft

Author: sharxu
Writer: v-yipli
Tech Reviewer: amitban;sharxu;sqlprev
Editor:v-edcork

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×