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:
- Localizar todos os objetos dependentes que se referem à coluna da tabela/visualização
- Eliminar todas as dependências forçadas
- Renomear a coluna executando sp_rename
- Recriar todas as dependências forçadas que foram eliminadas no passo #2
- 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.
- Abra o SQL Server Management Studio ou Visual Studio
- Em Object Explorer/Server Explorer, navegue para a tabela ou coluna de visualização que você quer renomear
- Clique o botão direito na coluna e selecione a opção Safe rename no ApexSQL Search menu.
- Para visualizar as alterações que serão executadas, clique Generate preview na caixa de diálogo Safe rename column
- A guia Generated script exibe o script que será executado para renomear a coluna
- Abra a guia Warnings para visualizar as informações sobre pontenciais problemas que serão encontrados durante o processo de renomeação
- 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
- 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.
-
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
- 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