Sintomas
Suponha que você adicione uma coluna a uma tabela no Microsoft SQL Server 2012 ou no SQL Server 2014. Quando o tamanho da linha está perto do tamanho máximo permitido que é de 8.060 bytes, a operação de adição pode demorar muito tempo.
Causa
O problema ocorre porque, quando o tamanho total da linha está próximo do tamanho máximo permitido da linha, o SQL Server faz uma verificação completa da tabela para garantir que a adição de uma nova coluna não viole a integridade dos dados. As versões anteriores ao SQL Server 2012 não fazem essa verificação, e isso faz com que a DDL (linguagem de definição de dados) seja executada mais rapidamente. No entanto, esse comportamento resulta na falha de operações subsequentes, como atualização de linha ou redução se o tamanho da linha exceder o tamanho permitido.
Resolução
A atualização cumulativa introduz um novo sinalizador de rastreamento 647 para o comportamento de compatibilidade com versões anteriores. O problema foi corrigido primeiro na atualização cumulativa a seguir do SQL Server.
Atualização cumulativa 5 para SQL Server 2014 /en-us/help/3011055
Atualização cumulativa 12 para SQL Server 2012 SP1 /en-us/help/2991533
Atualização cumulativa 2 para SQL Server 2012 SP2 /en-us/help/2983175
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança incluídas na atualização cumulativa anterior. Confira as atualizações cumulativas mais recentes do SQL Server:
Informações adicionais
-
Você pode ativar o sinalizador de rastreamento 647 usando o parâmetro de inicialização. Para obter informações, consulte Opções de inicialização do serviço de mecanismo de banco de dados.
-
Você pode executar a seguinte consulta (substitua <nome da tabela> pelo nome da tabela real) para testar a tabela específica antes da operação em um sistema de produção e planejar o efeito desse problema. Se o resultado for maior que 8.060, a tabela estará sujeita a esse problema. Além disso, se você tiver solto colunas, precisará alterar a tabela com a opção reconstruir. A recriação da tabela pode fazer com que a consulta retorne resultados corretos.
select 1+1+2 + 2 + (case when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end) + ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 + sum( case when max_length=-1 then 24 else max_length end) from sys.system_internals_partition_columns col join sys.partitions par on col.partition_id = par.partition_id where object_id = object_id ('<table name>') and index_id in (0,1) and partition_number =1
-
Você pode considerar a adição de colunas de comprimento variável ou colunas esparsas quando o aplicativo adiciona muitas colunas à tabela com frequência. É uma operação somente de metadados, mesmo que o tamanho total de todas as colunas exceda 8.060 bytes.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".