Sintomas
Assuma que cria um procedimento armazenado que utiliza um cursor numa variável de tabela no Microsoft SQL Server 2012 ou SQL Server 2014. Além disso, o procedimento armazenado atualiza a tabela utilizando uma declaração WHERE CURRENT OF juntamente com o cursor. Por exemplo, o seu procedimento armazenado pode assemelhar-se ao 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 executa o seu procedimento armazenado utilizando o procedimento armazenado sp_refreshsqlmodule sistema, poderá ocorrer uma violação de acesso e poderá receber mensagens de erro que se assemelham ao seguinte:
Msg 596, Nível 21, Estado 1Cant continua a execução porque a sessão está no estado de morte. Msg 0, Nível 20, estado 0A erro grave ocorreu no comando atual. Os resultados, se houver, devem ser descartados.
Nesta situação, os erros que se assemelham aos seguintes são também escritos nos registos de erro do SQL Server:
tempo de data.730 spid51 SqlDumpExceptionHandler: Processo 51 gerou exceção fatal c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server está terminando este processo.date time.730 spid51 * **************************************************************************************************************************************************************************************************************************************************************hora da data.730 spid51 *hora da data.730 spid51 * BEGIN STACK DUMP:date.730 spid51 * data espiada 51date time.730 spid51 *hora da data.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.730 spi.d51 *data.730 spid51 * Endereço de exceção = 00007FFC270236D5 Módulo (sqllang+000000000005036D5)data.730 spid51 * Código de Exceção = c00000005 EXCEPTION_ACCESS_VIOLATIONdate.730 spid51 * Violação de acesso ocorreu endereço de leitura 000006F00620074date time.730 spid51 * Tampão de Entrada 136 bytes -data.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'data.730 spid51 * data.730 spid51 *
Resolução
Informação de atualização cumulativa
Esta questão é corrigida 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)
Cada nova atualização cumulativa do 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 últimas atualizações cumulativas do SQL Server:
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Conheça a terminologia que a Microsoft utiliza para descrever atualizações de software.