Neste artigo, o dataholic Felipe Aguiar compartilha uma forma de alterar em lote o tamanho de colunas que fazem parte de uma primary key ou outras constraints.
Cenário: Cliente solicitou que fosse alterado o tamanho de todas as tabelas que continham a coluna [SERIE] de varchar(3) para varchar(5).
O Problema: Várias tabelas possuíam esta coluna como uma primary key, sendo necessário, desta forma, dropar as constraints e índices, assim como alterar as foreign Keys.
Essa procedure tem como objetivo retornar no output todos os comandos que precisam ser executados e em ordem, para que esta operação possa ser realizada com sucesso.
Exemplo :
use tempdb;
exec altera_tamanho_coluna_lote @nome_coluna_alvo = ‘serie’, @tipo_dados_tamanho = ‘VARCHAR (5)’
Sem mais delongas, vamos ao script da procedure:
Montando o cenário:
Criamos a tabela que irá guardar os scripts
Nesta parte, buscamos todas as tabelas que contenham a coluna informada
Agora buscamos todas as FOREIGN KEYS ligadas as tabelas que identificamos anteriormente
Aqui, retornamos todas as PRIMARY KEYS que estão vinculadas a coluna que vamos alterar o tamanho.
Neste passo, buscamos as default constraints para serem recriadas também.
Aqui, estamos buscando as colunas / tabelas que estão ligadas por uma foreign key a alguma tabela que possui a coluna [SERIE], porém que a tabela “filha” não tenha o mesmo nome de coluna.
Exemplo:
[Tabela1] Possui a coluna [Serie]
[Tabela2] Possui a coluna [Serie2] que é uma foreign key da [Tabela1] coluna [Serie]
Pequena validação para travar o script caso existam outras constraints não suportadas atualmente nesta versão do script.
Aqui temos um passo extra, onde verificaremos o tamanho das tabelas e dos índices.
Ajudará na tomada de decisão quanto a janela de manutenção necessária para realizar a alteração do tamanho da coluna.
Por fim, mas não menos importante, temos a recriação dos índices:
Após coletado todas as informações necessárias, vamos inserir todos os scripts em uma tabela e realizar a ordenação
E aqui, podemos exibir todos os scripts necessários para a realização desta tarefa.
Procedure disponível em: scripts_publicos/altera_tamanho_coluna_lote.sql at main · aguiarfpmr/scripts_publicos (github.com)
Espero que tenham gostado e que esse conteúdo possa ajudar de alguma forma, em uma demanda similar.