Pregunta

Estoy seguro de que esto podría ser muy consulta común, pero no pude encontrar una buena respuesta por ahora.

Aquí está mi pregunta:

Tengo una tabla llamada Contactos con la columna varchar Título . Ahora en medio de desarrollo quiero reemplazar el campo Título TitleID que es clave externa a Mesa ContactTitles . En la mesa momento Contactos tiene más de 60 dependencias (otras tablas, vistas funciones).

¿Cómo puedo hacer que la manera más fácil y segura?

Utilizamos: MSSQL 2005, los datos ya se ha migrado, sólo quieren a cambio de esquema

.

Editar:

Gracias a todos por la repetición rápida.

Como se mencionó Contactos tabla tiene más de 60 personas a cargo, pero cuando se ejecutó siguiente consulta, sólo 5 de ellos utilizan Título columna. La migración se llevó a cabo la escritura, por lo que los cambios requeridos no hay datos.

/*gets all objects which use specified column */

SELECT Name FROM syscomments sc JOIN sysobjects so ON sc.id = so.id WHERE TEXT LIKE '%Title%' AND TEXT LIKE '%TitleID%'

Luego pasó por esos 5 puntos de vista y los actualiza manualmente.

¿Fue útil?

Solución

Para Microsoft SQL Server Redgate tiene un producto (no libre) que puede ayudar con esta refactorización http://www.red-gate.com/products/sql_refactor/index.htm

En el pasado he logrado hacer esto con bastante facilidad (si primitivamente) simplemente por obtener una lista de cosas a la revisión

SELECT * FROM sys.objects
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Contacts%' 

(y posiblemente teniendo información dependencias en cuenta y filtrar por tipo de objeto)

Scripting todos los de interés en la gestión Estudio entonces simplemente ir por la lista y la revisión de todos ellos y cambiar el crear para modificar. Debe ser bastante simple y el cambio repetitivo incluso para 60 posibles dependencias. Además, si usted se refiere a una columna inexistente debería obtener un mensaje de error cuando se ejecuta la secuencia de comandos para alterar.

Si utiliza * en sus consultas o SQL adhoc en sus aplicaciones, obviamente, las cosas pueden ser un poco más difícil.

Otros consejos

refactorización métodos. Comience por la creación de un nuevo campo llamado TitleID, a continuación, copiar todos los títulos en la tabla ContactTitles. Luego, uno por uno, actualice cada una de las dependencias a utilizar el campo TitleID. Sólo asegúrese de que todavía tienes un sistema de trabajo después de cada paso.

Si los datos se va a cambiar, usted tiene que tener cuidado y asegurarse de que cualquier cambio en la columna de la Title también cambian la tabla ContactTitles. Usted lo único que tiene que mantenerlos sincronizados mientras estás haciendo la refactorización.

Editar Hay incluso un libro sobre él! Refactoring Bases de datos .

Como otros señalaron que depende de su RDBMS.

Hay dos enfoques:

  • hacer un cambio en la tabla y corregir todas las dependencias
  • hacer una vista que se puede utilizar en lugar de un acceso directo a la tabla (esto se puede evitar futuros cambios en la tabla núcleo subyacente (s), pero es posible perder algo de la funcionalidad de actualización, dependiendo de su DBMS)

Uso SP_Depend 'Nombre de la tabla' para comprobar las dependencias de la tabla y luego usar el sp_rename cambiar el nombre del nombre de columna que es muy útil. sp_rename cambia automáticamente el nombre del índice asociado cada vez que se cambia el nombre de una restricción PRIMARY KEY o UNIQUE. Si un índice ha cambiado el nombre está ligado a una restricción PRIMARY KEY, la restricción PRIMARY KEY también se renombra automáticamente por sp_rename.

y luego iniciar la actualización del procedimiento y funciones de uno en uno no hay otra opción buena para el cambio como éste si luego me encontré dice también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top