Alterando a largura da coluna

39

Aumentar a largura de uma coluna (nvarchar) necessariamente eliminará a tabela?

Em outras palavras, a largura pode ser alterada em um ambiente de produção com usuários ativos?

Imaginei que se o tamanho estivesse aumentando (em vez de diminuir), isso não seria um problema.

Fernando
fonte

Respostas:

52

Se você estiver fazendo isso através de uma instrução T-SQL, como a seguir, nenhuma queda de tabela ocorrerá e você poderá fazê-lo com segurança em um ambiente de produção:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Se você fizer isso através da GUI da tabela de design do SSMS, isso dependerá do script que decidir usar para implementar a alteração. Às vezes, ele insere dados em uma tabela temporária, descarta a tabela original, cria uma nova versão dessa tabela e insere-a novamente na nova. Uma maneira fácil de descobrir o que ele fará é clicar no botão "Gerar script" e observar o T-SQL que planeja executar.

Derek Kromm
fonte
11
Eu pensei que até o botão "Gerar script" lança um aviso de que você está prestes a soltar uma tabela antes mesmo de mostrar o script.
Nick Chammas
11
Ele lança o erro, mas na verdade não executa o script até você clicar em OK (ou executar ou qualquer outra coisa) na janela com o script. Você pode copiar o script e cancelar a janela que mostra o script.
mrdenny
mas funciona, digamos, uma mudança de float para decimal (n, n)?
Nishanth Shaan
Que efeito isso tem se a tabela for replicada? Presumo que as tabelas de assinantes não atualizem automaticamente?
tmwoods
18

Aumentar a largura da nvarcharcoluna não exigirá uma queda da tabela. Nem qualquer ALTER TABLEoperação. Para obter detalhes sobre restrições ao alterar as propriedades da tabela ou coluna, você pode ler a instrução ALTER TABLE .

Copiei as partes mais relevantes da documentação abaixo:

Alterando o tamanho de uma coluna

Você pode alterar o comprimento, a precisão ou a escala de uma coluna especificando um novo tamanho para o tipo de dados da coluna na cláusula ALTER COLUMN. Se existirem dados na coluna, o novo tamanho não poderá ser menor que o tamanho máximo dos dados. Além disso, a coluna não pode ser definida em um índice, a menos que a coluna seja um tipo de dados varchar, nvarchar ou varbinary e o índice não seja o resultado de uma restrição PRIMARY KEY. Veja o exemplo P.

Fechaduras e ALTER TABLE

As alterações especificadas em ALTER TABLE são implementadas imediatamente. Se as alterações exigirem modificações nas linhas da tabela, ALTER TABLE atualizará as linhas. ALTER TABLE adquire um bloqueio de modificação de esquema na tabela para garantir que nenhuma outra conexão faça referência aos metadados da tabela durante a alteração, exceto as operações de índice online que exigem um bloqueio SCH-M muito curto no final. Em uma operação ALTER TABLE… SWITCH, o bloqueio é adquirido nas tabelas de origem e de destino. As modificações feitas na tabela são registradas e totalmente recuperáveis. Alterações que afetam todas as linhas em tabelas muito grandes, como descartar uma coluna ou adicionar uma coluna NOT NULL com um padrão, podem levar muito tempo para serem concluídas e geradas muitos registros de log. Essas instruções ALTER TABLE devem ser executadas com o mesmo cuidado que qualquer INSERT, UPDATE,

MicSim
fonte
Também ótima resposta. Mas eu só podia escolher um. Obrigado!
Fernando