Sintomas
Suponha que você crie um procedimento armazenado que usa um cursor em uma variável de tabela no Microsoft SQL Server 2012 ou SQL Server 2014. Além disso, o procedimento armazenado atualiza a tabela ao utilizar uma instrução WHERE CURRENT OF juntamente com o cursor.
Por exemplo, o seu procedimento armazenado pode ter o seguinte aspeto:
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 ccc
CLOSE ccc
SELECT * FROM @TableVar
END
Quando executa o procedimento armazenado utilizando o procedimento armazenado no sp_refreshsqlmodule, poderá ocorrer uma violação de acesso e poderão ser recebidas mensagens de erro semelhantes às seguintes:
Nota
Msg 596, Nível 21, Estado 1Não é possível continuar a execução porque a sessão está no estado matar. Msg 0, Nível 20, Estado 0Ocorreu um erro grave no comando atual. Os resultados, se houver, devem ser descartados.
Nesta situação, os erros semelhantes aos seguintes também são gravados nos registos de erro SQL Server:
Nota
data time.730 spid51 SqlDumpExceptionHandler: Processo 51 gerou exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está a terminar este processo.
data hora.730 spid51 * *******************************************************************************
data hora.730 spid51 *
data time.730 spid51 * BEGIN STACK DUMP:
data hora.730 spid51 * data hora spid 51
data hora.730 spid51 *
data hora.730 spid51 *
date time.730 spid51 * Exception Address = 00007FFC270236D5 Module(sqllang+0000000005036D5)
date time.730 spid51 * Código de exceção = c0000005 EXCEPTION_ACCESS_VIOLATION
data hora.730 spid51 * Ocorreu violação de acesso endereço de leitura 0000006F00620074
data time.730 spid51 * Buffer de entrada 136 bytes -
data hora.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]»
data hora.730 spid51 *
data hora.730 spid51 *
Resolução
Informações de atualização cumulativa
Este problema foi corrigido nas seguintes atualizações:
- Atualização cumulativa 13 para SQL Server 2014
- Atualização cumulativa 6 para SQL Server 2014 Service Pack 1 (SP1)
- Atualização cumulativa 2 para SQL Server 2012 Service Pack 3 (SP3)
- Atualização cumulativa 11 para SQL Server 2012 Service Pack 2 (SP2)
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. Consulte as atualizações cumulativas mais recentes para SQL Server:
- Atualização cumulativa mais recente para o SQL Server 2014
- Atualização cumulativa mais recente para o SQL Server 2014 SP1
- Atualização cumulativa mais recente para o SQL Server 2012 SP2
- Atualização cumulativa mais recente para o SQL Server 2012 SP3
Estado
A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.