Preâmbulo
Hoje eu estava modificando uma coluna no SQL Server 2008, alterando o tipo de dados de algo como moeda (18,0) para (19,2).
Eu recebi o erro "As alterações feitas exigem que as tabelas a seguir sejam eliminadas e recriadas" no SQL Server.
Antes de tentar responder, leia o seguinte:
Já sei que existe a opção em Ferramentas ► Opções ► Designer ► Designers de tabela e banco de dados ► Desmarque a caixa "Impedir salvar alterações que exijam a recriação da tabela". ... então não responda com isso!
Pergunta real
Minha pergunta real é para outra coisa, como segue:
Existem efeitos negativos / possíveis inconvenientes em fazer isso?
A tabela é realmente descartada e recriada automaticamente quando esta caixa está desmarcada?
Em caso afirmativo, a tabela copia uma réplica exata 100% da tabela de origem?
fonte
Respostas:
A tabela é descartada e recriada apenas nos casos em que essa é a única maneira de programar o Management Studio do SQL Server para saber como fazê-lo.
Certamente, há casos em que isso é feito quando não é necessário, mas também há casos em que as edições feitas no Management Studio não são eliminadas e recriadas porque não é necessário.
O problema é que enumerar todos os casos e determinar em que lado da linha eles se encaixam será bastante tedioso.
É por isso que gosto de usar
ALTER TABLE
em uma janela de consulta, em vez de designers visuais que ocultam o que estão fazendo (e francamente têm bugs) - sei exatamente o que vai acontecer e posso me preparar para casos em que a única possibilidade é soltar e recriar a tabela (que é um número menor que a frequência com que o SSMS fará isso com você).fonte
Ferramentas -> Opções -> Nó Designers -> Desmarque a opção " Impedir salvar alterações que exigem recreação na tabela ".
fonte
Referência - desativar essa opção pode ajudar a evitar a recriação de uma tabela, mas também pode levar à perda de alterações. Por exemplo, suponha que você habilite o recurso Rastreamento de Alterações no SQL Server 2008 para rastrear alterações na tabela. Quando você executa uma operação que faz com que a tabela seja recriada, você recebe a mensagem de erro mencionada na seção "Sintomas". No entanto, se você desativar essa opção, as informações de rastreamento de alterações existentes serão excluídas quando a tabela for recriada. Portanto, a Microsoft recomenda que você não solucione esse problema desativando a opção.
fonte
O SQL Server descarta e recria as tabelas somente se você:
O uso de ALTER é mais seguro, pois caso os metadados sejam perdidos enquanto você recria a tabela, seus dados serão perdidos.
fonte
IDENTITY
propriedade em uma coluna, por exemplo.Sim, existem efeitos negativos disso:
Se você escreve uma alteração bloqueada por esse sinalizador, obtém algo como o script abaixo (tudo o que estou transformando da coluna ID em Contato é uma coluna IDENTITY com numeração automática, mas a tabela possui dependências). Observe possíveis erros que podem ocorrer enquanto o seguinte estiver em execução:
-
fonte