CORREÇÃO: Violação de acesso quando você executa um procedimento armazenado que usa um cursor em uma variável de tabela no SQL Server

IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.

Clique aqui para ver a versão em Inglês deste artigo: 3138930
Sintomas
Suponha que você crie um procedimento armazenado que usa um cursor em uma variável de tabela no Microsoft SQL Server 2012 ou 2014 do SQL Server. Além disso, o procedimento armazenado atualiza a tabela usando uma instruçãoOnde atual de juntamente com o cursor.

Por exemplo, o procedimento armazenado pode lembrar o seguinte:
CREATE PROCEDURE dbo.usp_TestSP AS  BEGIN  DECLARE @TableVar TABLE (SomeInt INT NULL) INSERT @TableVar VALUES (NULL)  DECLARE @curInt INT, @newInt INT SET @newInt = 1  DECLARE ccc CURSOR LOCAL FOR SELECT SomeInt FROM @TableVar WHERE SomeInt IS NULL  OPEN ccc  FETCH NEXT FROM ccc INTO @curInt UPDATE @TableVar SET SomeInt = @newInt WHERE CURRENT OF cccCLOSE ccc  SELECT * FROM @TableVar END 

Quando você executa o procedimento armazenado utilizando o sistema de sp_refreshsqlmodule procedimento armazenado, pode ocorrer uma violação de acesso, e você pode receber mensagens de erro semelhantes aos seguintes:
Msg 596, nível 21, estado 1Cannot continuar a execução porque a sessão está no estado interrompido. Msg 0, nível 20, estado 0A erro grave no comando atual. Os resultados, se houver algum, deverão ser descartados.

Nessa situação, erros semelhantes aos seguintes também são gravados nos logs de erro do SQL Server:
Data de time.730 spid51 SqlDumpExceptionHandler: 51 processo gerou exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está encerrando esse processo.
date time.730 spid51 * *******************************************************************************
Data de spid51 de time.730 *
Data de spid51 de time.730 * iniciar despejo de pilha:
Data de spid51 de time.730 * data hora spid 51
Data de spid51 de time.730 *
Data de spid51 de time.730 *
Data de spid51 de time.730 * endereço de exceção = Module(sqllang+00000000005036D5) de 00007FFC270236D5
Data de spid51 de time.730 * código de exceção = c0000005 EXCEPTION_ACCESS_VIOLATION
Data de spid51 de time.730 * violação de acesso ocorreu ao ler endereço 0000006F00620074
Data de spid51 de time.730 * bytes de 136 do Buffer de entrada -
Data de spid51 de time.730 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'
Data de spid51 de time.730 *
Data de spid51 de time.730 *

Resolução

Informações da atualização cumulativa

Esse problema foi corrigido nos seguintes atualizações:
Recomendação: Instale a atualização cumulativa mais recente para o SQL Server

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Confira as mais recentes atualizações cumulativas para o SQL Server:
Situação
A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".
Referências
Saiba mais sobre o terminologia que a Microsoft usa para descrever as atualizações de software.

Propriedades

ID do Artigo: 3138930 - Última Revisão: 05/31/2016 09:27:00 - Revisão: 3.0

Microsoft SQL Server 2012 Service Pack 3, Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3138930 KbMtpt
Comentários