Como renomear colunas sem corromper seu banco de dados SQL

Renomear uma tabela ou uma coluna de uma view não é algo que um desenvolvedor SQL precise fazer todos os dias. Entretanto, quando é preciso, como pode ser realizado de forma fácil e sem esforço?

Somente renomear uma coluna não é difícil. Para renomear a coluna TerritoryID na tabela Sales.SalesTerritory em TerID, execute o seguinte código:

EXECUTE sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';

O problema é que você irá gerar o seguinte aviso:

Caution: Changing any part of an object name could break scripts and stored procedures.

Adicionalmente, talvez até este:

Object ‘Sales.SalesTerritory.TerritoryID’ cannot be renamed because the object participates in enforced dependencies.

O que são esses scripts que serão corrompidos?

Digamos que você tenha uma stored procedure Sales.vTer que faz referência à coluna TerritoryID, na tabela Sales.SalesTerritory. A procedure sp_rename somente renomeará a coluna TerritoryID na tabela Sales.SalesTerritory, mas não na stored procedure Sales.vTer.

Portanto, a tabela Sales.SalesTerritory irá conter a coluna TerrID, mas a stored procedure chamará pelo Sales.SalesTerritory.TerritoryID, da qual não existe mais em nenhum lugar. O script estará corrompido e estas execuções falharão.

O que são dependências forçadas?

Uma dependência é “forçada” quando o objeto de referência tem uma expressão vinculado ao esquema. Esta mensagem também pode aparecer, se houver quaisquer outros objetos que tenha drop e recriação com o nome da nova coluna, a fim de renomear a coluna com sucesso.

Como encontrar uma stored procedure e outros objetos que serão afetados pela alteração no nome da coluna?

O SQL Server Management Studio pode traçar dependências, pela opção View Dependencies. Este mostra objetos dependentes do item selecionado, mas você ainda precisa atualizar os objetos que se referem à coluna renomeada uma por uma.

Para renomear uma coluna usando sp_rename, você precisa:

  1. Localizar todos os objetos dependentes que se referem à coluna da tabela/visualização
  2. Eliminar todas as dependências forçadas
  3. Renomear a coluna executando sp_rename
  4. Recriar todas as dependências forçadas que foram eliminadas no passo #2
  5. Se você quer renomear mais de uma 1 coluna, repita os passos 1 até o 4

Este não é um processo atrativo. Faz com que você queira desistir de realizar a renomeação, ao invés de continuar.

Como renomear uma coluna sem muita dificuldade?

O ApexSQL Search pode ajudar. Este é um complemento para o SQL Server Management Studio e Visual Studio na qual localiza textos em objetos do banco de dados SQL, e dados em tabelas e views do banco de dados SQL. Permite também alterações em tabelas, views, stored procedures, funções, colunas, nomes de parâmetros e esquemas sem corromper dependências, enquanto visualiza todas as interdependências dos objetos.

  1. Abra o SQL Server Management Studio ou Visual Studio
  2. Em Object Explorer/Server Explorer, navegue para a tabela ou coluna de visualização que você quer renomear
  3. Clique o botão direito na coluna e selecione a opção Safe rename no ApexSQL Search menu.

  4. Para visualizar as alterações que serão executadas, clique Generate preview na caixa de diálogo Safe rename column
  5. A guia Generated script exibe o script que será executado para renomear a coluna

  6. Abra a guia Warnings para visualizar as informações sobre pontenciais problemas que serão encontrados durante o processo de renomeação

  7. Abra a guia Sequence para visualizar todas as ações que serão executadas durante a renomeação. Estas são ações que você precisará realizar manualmente se você usou o procedimento sp_rename

  8. Abra a guia Dependencies para visualizar os objetos que dependem da coluna renomeada. Estes são objetos que serão automaticamente modificados para manter os scripts íntegros. Se você usou a procedure sp_rename, você terá que localizá-los e modificá-los manualmente.

  9. Se você quer modificar o script antes de executá-lo, clique o botão Open. O gerador de script abrirá no SQL Server Management Studio Query editor/ Visual Studio editor

    Revise, modifique se necessário e execute-o clicando em Execute ou salve-o para um arquivo

  10. Para executar o script como está, clique o botão Rename

Renomear uma coluna pode ser fácil. Você não precisa analisar todos os seus banco de dados e localizar pelas dependências por si mesmo. Use o ApexSQL Search para fazê-lo por você. Ele encontrará todos os objetos dependentes, renomeará e fará drop-recreate quando necessário, para evitar scripts corrompidos.

Tradução: Ricardo Leka Roveri

September 2, 2015