Consideraciones antes de cambiar nombres de objetos de base de datos
Actualización: noviembre 2007
Antes de cambiar el nombre de un objeto de base de datos en Visual Studio Team System Database, debería tener en cuenta lo siguiente:
Evitar la pérdida de datos al cambiar nombres de columna y tabla
Cambiar nombres de columna en vistas
Efectos de los errores de compilación
Efectos en los planes de generación de datos
Efectos en las pruebas unitarias
Efectos en las secuencias de comandos T-SQL
Evitar la pérdida de datos al cambiar nombres de columna y tabla
Cuando se cambia el nombre de un objeto de base de datos, la secuencia de comandos de implementación que se crea al generar el proyecto refleja ese cambio. Cuando se cambia el nombre de una columna o una tabla, la secuencia de comandos quita el objeto original que tiene el nombre anterior y agrega la nueva columna o tabla con el nuevo nombre. Si implementa este cambio en la base de datos existente como una actualización, se perderán los datos de la columna o la tabla original.
Para controlar si se quita la columna o la tabla original, debe establecer la opción adecuada en las propiedades del proyecto. Para ello puede abrir las propiedades del proyecto, hacer clic en la ficha Generar y activar o desactivar la casilla Generar instrucciones DROP para objetos que están en la base de datos de destino pero no en el proyecto de base de datos. Si activa esta casilla, se incluye la instrucción drop para el objeto original en la secuencia de comandos de implementación que se crea al generar el proyecto. Si desactiva la casilla, no se incluye la instrucción drop para el objeto original en la secuencia de comandos de implementación que se crea al generar el proyecto.
Haga los planes necesarios para evitar la pérdida de datos que puede producir la instrucción drop. En los ejemplos siguientes se muestran algunas ideas para migrar los datos de forma segura:
Reemplace las instrucciones drop/add con instrucciones sp_rename.
No implemente la instrucción drop. Tendrá copias del objeto original y del nuevo, y podrá mover los datos entre ellos. Puede mover los datos manualmente si utiliza una instrucción select into u otra instrucción T-SQL. Puede utilizar Bulk Copy Program (Programa de copia masiva), Servicios de transformación de datos (SQL 2000) o SQL Server Integration Services (SQL 2005) para mover los datos automáticamente.
Antes de implementar el cambio, mueva los datos de la tabla original a una ubicación temporal (por ejemplo, a una tabla de una base de datos diferente). Implemente las instrucciones drop y add. Mueva los datos de la ubicación temporal al nuevo objeto. Puede mover los datos manualmente si utiliza una instrucción select into u otra instrucción T-SQL. Puede utilizar Bulk Copy Program (Programa de copia masiva), Servicios de transformación de datos (SQL 2000) o SQL Server Integration Services (SQL 2005) para mover los datos automáticamente.
Para obtener más información, vea Proteger los datos durante una operación de cambio de nombre.
Cambiar nombres de columna en vistas
Una vista consiste en una instrucción que selecciona columnas de tablas u otras vistas. Las tablas que se utilizan en la vista se conocen como tablas base o tablas subyacentes. Por ejemplo, el código siguiente crea una vista que se basa en la tabla HumanResources.Employee:
CREATE VIEW dbo.vEmployeeTest
AS
SELECT EmployeeID, Title
FROM HumanResources.Employee
Al cambiar el nombre de una columna en una vista, no cambia el nombre de la columna en la tabla subyacente. En su lugar, se crea un alias para el nombre en la vista, como en los ejemplos siguientes:
CREATE VIEW dbo.vEmployeeTest
AS
SELECT EmployeeID, Title AS JobTitle
FROM HumanResources.Employee
CREATE VIEW dbo.vEmployeeTest (EmployeeID, JobTitle)
AS
SELECT EmployeeID, Title
FROM HumanResources.Employee
Nota: |
---|
Si una vista utiliza SELECT * para obtener los datos de la tabla subyacente, el * se expande para mostrar cada una de las columnas. Se crea un alias para la columna cuyo nombre ha cambiado, como en los ejemplos anteriores. |
Si desea cambiar el nombre de la columna en la vista y en la tabla subyacente, cambie el nombre de la columna en la tabla, ya que así la columna se actualizará automáticamente en la vista.
Efectos de los errores de compilación
Al cambiar el nombre de un objeto de base de datos en Database Edition, se intentan actualizar otros objetos de base de datos, los planes de generación de datos, las pruebas unitarias y los scripts que hacen referencia a ese objeto. Mientras trabaja en un proyecto de base de datos, puede realizar acciones que creen errores de compilación y después realizar otras acciones que los corrijan. Por ejemplo, podría eliminar una tabla y después actualizar una vista que depende de esa tabla para quitar la referencia a la tabla eliminada. Entre las operaciones de eliminar la tabla y actualizar la vista, su proyecto tiene errores de compilación.
Aunque el proyecto tenga errores de compilación, podría cambiar el nombre de un objeto de base de datos correctamente. Sin embargo, no sería posible actualizar correctamente todas las referencias al objeto cuyo nombre va a cambiar. Si el proyecto tiene errores de compilación, recibirá una advertencia en el cuadro de diálogo Vista previa de los cambios. Si continúa, se cambiará el nombre del objeto y se actualizarán las referencias en la medida que sea posible. Si cancela, puede corregir primero los errores de compilación y después intentar de nuevo la operación de cambio de nombre.
El cuadro de diálogo Vista previa de los cambios muestra advertencias para:
Errores de compilación en el proyecto de base de datos
Errores de sintaxis en secuencias de comandos y pruebas unitarias
Planes de generación de datos mal formados
Efectos en los planes de generación de datos
Al cambiar el nombre de un objeto de base de datos en Team Edition for Database Professionals, se intentan actualizar los planes de generación de datos que hacen referencia a ese objeto. Sin embargo, debería tener en cuenta lo siguiente:
Antes de cambiar el nombre de un objeto, debe guardar los planes de generación de datos que estén abiertos en el editor. Si tiene planes de generación de datos abiertos al intentar cambiar el nombre de un objeto, se le pedirá que los guarde antes. Si continúa, todos los planes de generación de datos abiertos se guardan y se cierran automáticamente, y la operación de cambio de nombre prosigue. Si no continúa, se cancela la operación de cambio de nombre. Todos los planes de generación de datos se quedan abiertos y no se guardan.
Debe actualizar manualmente los planes de generación de datos que utilicen generadores de datos enlazados a datos.
Para obtener más información, vea Generar datos con generadores de datos.
Efectos en las pruebas unitarias
Normalmente, las instrucciones Transact-SQL (T-SQL) de una prueba unitaria hacen referencia a los objetos de la base de datos especificada en ValidationConnectionString y ExecutionConnectionString para la prueba unitaria. A continuación se muestran dos posibilidades en las que no se da este caso:
Las instrucciones T-SQL de una prueba unitaria pueden hacer referencia a objetos de otras bases de datos.
Las instrucciones T-SQL de una prueba unitaria pueden hacer referencia a objetos de la misma base de datos pero de esquemas diferentes (SQL Server 2005).
Al cambiar el nombre de un objeto de base de datos en Database Edition, se intentan actualizar las pruebas unitarias de la solución que hacen referencia a ese objeto. En los casos antes mencionados, no sería posible actualizar las pruebas unitarias. Para actualizar las pruebas unitarias al cambiar el nombre de un objeto de base de datos, debe asegurarse de que utiliza el nombre completo de los objetos en las pruebas unitarias. Si utiliza nombres completos en las pruebas unitarias, el motor de refactorización puede actualizarlas cada vez que cambie el nombre de un objeto de esquema.
Para obtener más información acerca de las pruebas unitarias, vea Descripción general de las pruebas unitarias de base de datos.
Efectos en las secuencias de comandos T-SQL
Normalmente, las secuencias de comandos T-SQL de un proyecto de base de datos hacen referencia a los objetos de esquema de la base de datos del proyecto de base de datos. A continuación se muestran dos posibilidades en las que no se da este caso:
Las instrucciones T-SQL de una secuencia de comandos pueden hacer referencia a objetos de otras bases de datos.
Las instrucciones T-SQL de una secuencia de comandos pueden hacer referencia a objetos de la misma base de datos pero de esquemas diferentes (SQL Server 2005).
Al cambiar el nombre de un objeto de base de datos en Database Edition, se intentan actualizar los scripts de la solución que hacen referencia a ese objeto. En los casos antes mencionados quizá no sea posible actualizar las secuencias de comandos. Para actualizar las secuencias de comandos al cambiar el nombre de un objeto de base de datos, debe asegurarse de que utiliza el nombre completo de los objetos en las secuencias de comandos. Si utiliza nombres completos, el motor de refactorización puede actualizarlos cada vez que cambie el nombre de un objeto de esquema.
Para obtener más información acerca de las secuencias de comandos, vea Trabajar con scripts de base de datos.
Seguridad
Si un error impide que finalice una operación de refactorización, la información del error se escribe en el registro de eventos de aplicación, donde puede verlo cualquier usuario con permisos normales. Si considera que la información del esquema es confidencial y puede aparecer en el registro, tiene la posibilidad de borrar el registro o restringir el acceso al equipo cliente.
Vea también
Conceptos
Introducción a la terminología de Database Edition
Otros recursos
Cambiar el nombre de objetos de base de datos
Información general sobre la refactorización de cambio de nombre