La mejor manera de cambiar el nombre de las tablas después de que se complete el desarrollo


8

¿Cuál es el enfoque más fácil y confiable para cambiar el nombre de las tablas y columnas de la base de datos en SQL Server 2008 r2? Hemos finalizado el desarrollo y, por alguna razón, debemos cambiar el nombre de algunas tablas y algunas columnas.

¿Usar sinónimos es la buena manera de hacerlo? ¿Para qué dificultades debemos estar preparados? ¿Ayuda a cambiar el nombre de las columnas con gracia también?

Tenemos muchos scripts relacionados con estas tablas y los desarrolladores de .net también hacen referencia a ellos en la aplicación.


¿Es la intención cambiar el nombre de estos objetos de la base de datos y proporcionar una fachada para que las aplicaciones existentes no necesiten modificarse para usar los nuevos nombres de objetos?
billinkc

Respuestas:


10

Creo que el enfoque depende de si las aplicaciones están en vivo o si todavía está probando.

Para las tablas, el enfoque más seguro es crear un sinónimo con el nuevo nombre. De esta manera, puede cambiar las aplicaciones una por una (o incluso una referencia a la vez), sin tener que cambiarlas todas a la vez. No tiene que descartar el sinónimo y cambiar el nombre de la tabla hasta que esté seguro de tener todos los cambios en su lugar.

CREATE SYNONYM dbo.NewName FOR dbo.OldName;
-- change app to point to dbo.NewName;

-- once all of your changes have been tested:
BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
COMMIT TRANSACTION;

Para las columnas, es un poco más complicado. En su lugar, puede crear sinónimos que apunten a una vista, pero no todas las vistas serán necesariamente actualizables dependiendo de la tabla base. Como un simple ejemplo:

CREATE VIEW dbo.vNewName 
AS 
  SELECT Column1, NewColumnName = OldColumnName
    FROM dbo.OldName;

CREATE SYNONYM dbo.NewName FOR dbo.vNewName;

Luego, como anteriormente, cuando haya cambiado todas las referencias a columnas y al nuevo nombre de la tabla, simplemente:

BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  DROP VIEW dbo.vNewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
  EXEC sp_rename N'dbo.NewName.OldColumnName', N'NewColumnName', N'COLUMN';
COMMIT TRANSACTION;

Si la aplicación no está activa y aún se está sometiendo a pruebas, simplemente cambie el nombre de las columnas y arregle lo que se rompe después de una búsqueda global y reemplace (o refactorice inteligente usando SSDT, RedGate, etc.) a través del código / procedimientos de la aplicación, etc.

Si la aplicación está en vivo, deberá avanzar un poco más cautelosamente.


+1 para validar el cambio y corregir el enfoque que me rompió de mi propio equipo (deviro solo, por supuesto)
RThomas

Gracias por su buena respuesta, pero ¿podría aconsejarme qué quiere decir con: "De esta manera puede cambiar las aplicaciones una a la vez (o incluso una referencia a la vez), sin tener que cambiar todo? ellos a la vez ". ¿Quiere decir que deberíamos crear el sinónimo en ese momento, por ejemplo, la primera tabla t1, los cambios de código, luego la tabla t2, etc.?
Cielo

Ahora estamos en la fase de desarrollo, pero el sistema casi se ha completado para ese componente cuyo nombre se cambiará a estas tablas. El sistema ahora se implementa en UAT.
Cielo

1
@ Nazila no, quiero decir que puedes crear un sinónimo para table1 (y uno para table2, table3, etc.). Luego puede cambiar una aplicación, o una clase, o un módulo, o un procedimiento almacenado para usar el nuevo nombre a través del sinónimo. El resto del código puede continuar usando el nombre antiguo. No eliminaría el sinónimo y el cambio de nombre hasta que se haya actualizado todo el código.
Aaron Bertrand

0

Bueno, hay muchas dificultades con las que puede encontrarse al cambiar el nombre de tablas y columnas. Cualquier otro código de aplicación o SQL que los llame tendrá que cambiar su nombre para que coincida o no funcionará. Redgate hace algunas herramientas bastante buenas que pueden pasar y hacer todos los cambios en las vistas / funciones / sprocs SQL dependientes. El mayor consejo que puedo darle es hacer primero estos cambios en un entorno DEV y TEST TEST TEST para asegurarse de que ha reparado el código en todas partes.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.