Cómo renombrar una columna sin romper su base de datos SQL

Renombrar una columna de una tabla o una vista no es algo que un desarrollador de SQL necesita hacer cada día. De todas maneras, cuando ese momento llega, ¿cómo se puede hacer fácilmente y sin esfuerzo?

Sólo renombrar una columna no es difícil. Para renombrar la columna TerritoryID en la tabla Sales.SalesTerritory a TerID, ejecute el siguiente código:

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

El problema es que usted verá el siguiente aviso:

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

Adicionalmente, quizá incluso esto:

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

¿Qué son esto scripts que serán rotos?

Digamos que usted tiene el procedimiento almacenado Sales.vTer que referencia la columna TerritoryID en la tabla Sales.SalesTerritory. El procedure sp_rename sólo renombrará la columna TerritoryID en la tabla Sales.SalesTerritory, pero no la que está en el procedimiento Sales.vTer.

Por tanto, la tabla Sales.SalesTerritory contendrá la columna TeerID, pero el procedimiento almacenado llamará a Sales.SalesTerritory.TeritoryID, la cual ya no existe. El script será roto y su ejecución fallará.

Una dependencia es “forzada” cuando el objeto referenciado tiene una expresión ligada a un esquema. Este mensaje también es mostrado si hay cualquier otro objeto que tiene que eliminar y recrear con el nuevo nombre de la columna, para renombrar la columna exitosamente.

¿Cómo encontrar los procedimientos almacenados y otros objetos que serán afectados por el cambio en el nombre de la columna?

SQL Server Management Studio puede rastrar dependencias vía su opción View Dependencies. Ésta muestra los objetos que dependen del objeto seleccionado, pero usted aún tiene que actualizar los objetos que referencian la columna renombrada uno por uno.

Para renombrar una columna usando sp_rename, necesita hacer:

  1. Encontrar todos los objetos dependientes que referencian la columna de la tabla/vista
  2. Eliminar todas las referencias forzadas
  3. Renombrar la columna ejecutando sp_rename
  4. Recrear todas las referencias forzadas que fueron eliminadas en el paso # 2
  5. Si usted quiere renombrar más de una columna, repita los pasos del 1 al 4

No es un proceso atractivo. Hace que uno quiera rendirse, en lugar de continuar.

¿Cómo renombrar una columna sin tanto problema?

ApexSQL Search puede ayudar. Es un complemento GRATIS para SQL Server Management Studio y Visual Studio que encuentra texto en objetos de bases de datos SQL, y datos en tablas y vistas SQL. Permite cambiar las tablas, vistas, procedimientos almacenados, sunciones, columnas, nombres de parámetros y esquemas sin romper dependencias, mientras se visualiza todas las interdependencias entre objetos.

  1. Abra SQL Server Management Studio o Visual Studio
  2. En Object Explorer/Server Explorer, navegue a la columna de tabla o vista que desea renombrar
  3. Haga clic derecho en la columna y seleccione la opción Safe rename desde el menú ApexSQL Search:

  4. Para ver los cambios que serán ejecutados haga clic en Generate Preview en el diálogo Safe rename column
  5. La pestaña Generated script muestra el script que será ejecutado para renombrar la columna

  6. Abra la pestaña Warnings para ver la información acerca de problemas potenciales que fueron encontrados durante el proceso de renombramiento

  7. Abra la pestaña Sequence para ver todas las transacciones que serán ejecutadas durante el renombramiento. Estas son las acciones que usted hubiera tenido que realizar manualmente si usaba el procedimiento sp_rename

  8. Apara la pestaña Dependencies para ver todos los objetos que dependen de la columna renombrada. Estos son los objetos que serán automáticamente modificados para evitar que los scripts se rompan. Si usted usa el procedimiento sp_rename, tendría que haberlos entrado y modificado manualmente.

  9. Si usted desea modificar el script antes de ejecutarlo, haga clic en el botón Open. El script generado será abierto en el editor de SQL Server Management Studio o Visual Studio Revíselo, modifíquelo si es necesario y ejecútelo haciendo clic en Execute o grábelo en un archivo.
  10. Para ejecutar el script tal como está, haga clic en el botón Rename

Renombrar una columna puede ser fácil y GRATIS. Usted no necesita analizar toda su base de datos y buscar las dependencias por sí mismo. Use ApexSQL Search para que lo haga por usted. La herramienta encontrará todos los objetos dependientes, hará renombramientos y operaciones drop-recreate cuando sea necesario, para evitar romper los scripts.

Traductor: Daniel Calbimonte

diciembre 8, 2014