Sintomas
Altera o tipo de dados de uma coluna numa tabela de bases de dados de ntext para nvarchar(máx) num servidor que está a executar o Microsoft SQL Server 2012, 2014 ou 2016. Quando atualizar a tabela adicionando mais de 4.000 registos, o DBCC CHECKDB pode reportar erros que se assemelham ao seguinte:
Msg 8961, Nível 16, Estado 1, LineNumber Erro de tabela: ObjectID, indexID,partitionID,allocUnitID (dados do tipo LOB). O nó de dados fora de linha na página(PageID),slot 0, textID não corresponde à sua referência a partir da página(PageID), ranhura 0. Msg 8961, Nível 16, Estado 1, LineNumber Erro de tabela: ObjectID, indexID,partitionID,allocUnitID (dados do tipo LOB). O nó de dados fora de linha na página(PageID),slot 0, textID não corresponde à sua referência a partir da página(PageID), ranhura 0. Msg 8929, Nível 16, Estado 1, LineNumberObjectID,indexID,partitionID,allocUnitID (dados do tipo in-row): Erros encontrados em dados fora de linha com ID propriedade de registo de dados identificados pela RID =(RID) DBCC resultados para 'TableName'. Existem 1 linhas em 1 páginas para objeto "TableName". CHECKTABLE encontrou 0 erros de atribuição e 3 erros de consistência no quadro 'TableName'(ObjectID). repair_allow_data_loss é o nível mínimo de reparação dos erros encontrados pela DBCC CHECKTABLE(DatabaseName.TableName). Execução do DBCC concluída. Se o DBCC imprimiu mensagens de erro, contacte o administrador do sistema.
Resolução
Esta emissão é corrigida nas seguintes atualizações cumulativas para o SQL Server:
Atualização Cumulativa 5 para SQL Server 2016 RTM
Atualização Cumulativa 2 para SQL Server 2016 SP1
Atualização Cumulativa 4 para SQL Server 2014 SP2
Atualização Cumulativa 11 para SQL Server 2014 SP1
Atualização Cumulativa 7 para SQL Server 2012 Service Pack 3
Cada nova atualização cumulativa do SQL Server contém todas as correções de hotfixes e correções de segurança que foram incluídas na atualização cumulativa anterior. Confira as últimas atualizações cumulativas do SQL Server:
Última atualização cumulativa para SQL Server 2016
Solução
Para contornar este problema depois de alterar o tipo de dados, desa um dos grandes tipos de valor fora da opção de linha para 1.
ALTER TABLE TableName ALTER COLUMN COLUMN_NAME nvarchar(max) NOT NULL
go
exec sp_tableoption 'TableName', 'large value types out of row', '1'
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Saiba mais sobre a terminologia que a Microsoft utiliza para descrever atualizações de software.