CORREÇÃO: Dados da coluna podem ser excluídos quando você atualizar a outra coluna de comprimento variável em uma tabela de um banco de dados atualizado do SQL Server 2005

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: 3120595
Sintomas
Quando você atualiza um valor em uma coluna de comprimento variável em uma tabela de um banco de dados que foi atualizado do Microsoft SQL Server 2005, dados em outra coluna de tamanho variável na mesma linha são excluídos.

Esse problema ocorre em 2014 do Microsoft SQL Server e Microsoft SQL Server 2012. O cenário a seguir pode expor um banco de dados para esse problema. Esta lista representa uma seqüência de eventos:

  • É criado um banco de dados no SQL Server 2005.
  • No SQL Server 2005, você alterar uma tabela e, em seguida, solte uma ou mais colunas de comprimento variável no fim da definição da tabela.
  • Adicionar novas colunas de comprimento variável com um tipo de dados e tamanho das colunas soltas semelhantes.
  • O banco de dados é atualizado do SQL Server 2005 para 2014 do SQL Server ou SQL Server 2012.
  • Posteriormente, você atualizar o valor de outra coluna de comprimento variável, e os dados atualizados tem estourar a uma nova página.
Nesse cenário, os dados em uma ou mais das colunas adicionadas recentemente na mesma linha podem ser excluídos.

Você pode usar o script das Mais informações seção para verificar o seguinte:

  • Se todas as tabelas em um banco de dados determinado excluiu colunas de comprimento variável
  • Se colunas de comprimento variável adicionais foram criadas com correspondência de deslocamentos
Observação: Esse problema não é detectado pelo DBCC CHECKDB.
Resolução
Observação: Essa correção só impede que ocorrências futuras do problema.

Importante: Se você estiver atualizando o banco de dados do SQL Server 2005 para SQL Server 2014 ou SQL Server 2012, certifique-se de que você consulte a seção "Solução alternativa".

Esse problema foi corrigido primeiramente na seguinte atualização cumulativa para SQL Server:

Essas são as mais recentes atualizações cumulativas para essas versões do programa.

Recomendação: Instale a atualização cumulativa mais recente para o SQL Server 2014 ou SQL Server 2012

Instale a atualização cumulativa cada nova para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas na atualização cumulativa anterior. Confira as mais recentes atualizações cumulativas para o SQL Server:



Observação: Para obter mais informações sobre as compilações do SQL Server mais recentes, consulte Onde encontrar informações sobre o mais recente do SQL Server se baseia.
Como Contornar
Importante: Aplica esta solução alternativa quando você atualizar o banco de dados do SQL Server 2005 para 2014 do SQL Server ou SQL Server 2012 e antes de permitir que instruções de atualização a ser executado no banco de dados atualizado.

Para contornar esse problema se você soltar colunas em uma tabela, certifique-se de fazer o seguinte antes de atualizar ou excluir linhas:

  • Reconstruir o índice de cluster usando ALTER INDEX (...) RECONSTRUÇÃO
  • Reconstruir a pilha usando ALTER TABLE (...) RECONSTRUÇÃO

Mais Informações
Você pode usar o script a seguir para verificar se todas as tabelas em um banco de dados determinado excluiu colunas potencialmente afetados por esse problema.

Observação: Se o script não retorna quaisquer linhas, o que significa que esse problema não é atualmente aplicado a qualquer tabela no seu sistema.
SELECT DISTINCT OBJECT_NAME(sp.[object_id]) AS TableWithDroppedColsFROM sys.system_internals_partition_columns sipc1 WITH (NOLOCK)INNER JOIN sys.system_internals_partition_columns sipc2 WITH (NOLOCK)       ON sipc1.[partition_id] = sipc2.[partition_id] AND              sipc1.leaf_offset = sipc2.leaf_offset AND              sipc1.leaf_offset < 0 AND               sipc1.is_dropped < sipc2.is_droppedINNER JOIN sys.partitions sp WITH (NOLOCK) ON sipc1.[partition_id] = sp.[partition_id];

Importante: Este script deve ser usado somente para a finalidade e o escopo deste artigo.
Situação
A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Propriedades

ID do Artigo: 3120595 - Última Revisão: 05/31/2016 06:54:00 - Revisão: 11.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, 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 KB3120595 KbMtpt
Comentários