2010-08-04 25 views
5

Estoy usando un servidor MS SQL Server y uso muchas vistas (para usar con un asignador O/R). Una pequeña molestia es que me gustaríacómo manejar las actualizaciones de esquema db cuando se utiliza el enlazado de esquemas y la actualización con frecuencia

  • utilizar el enlace de
  • actualización con guiones (para desplegar en servidores y puestos en un sistema de control de código fuente)

pero topado con el problema de esquema que cada vez que quiero, por ejemplo agregue una columna a una tabla, primero debo colocar todas las vistas que hacen referencia a esa tabla, actualizar la tabla y luego volver a crear las vistas, incluso si las vistas no necesitan ser actualizadas de otra manera. Esto hace que mis scripts de actualización sean mucho más largos y, además, mirando las diferencias en el sistema de control de origen, es más difícil ver cuál fue el cambio real relevante.

¿Hay una mejor manera de manejar esto?

Necesito seguir siendo capaz de utilizar actualizaciones sql simples y controlables por la fuente. Un generador de código como se incluye en SQL Server Management Studio sería útil, pero tuve problemas con SQL Server Management Studio en que tiende a crear código que no especifica los nombres de algunos índices o restricciones (predeterminadas). Pero quiero tener dbs idénticos cuando ejecuto mis scripts en diferentes sistemas, incluidos los nombres de todas las contraints, etc., de modo que no tenga que pasar por los bucles para actualizar esas restricciones más adelante.

¿Entonces quizás un generador de código SQL más inteligente sería una solución?

Mi flujo de trabajo ahora es: "cannot ALTER 'XXX' because it is being referenced by object 'YYY'"

  • tipo de la declaración alter table en editor de consultas
  • verificación si puedo obtener un estado de error como
  • uso de SQL Server Managment Estudio de guión me create código para el objeto referenciado
  • insertar una declaración drop antes de la sentencia ALTER y crear comunicado tras
  • de verificación si la declaración drop crea error y repetir

Esto me molesta, pero tal vez simplemente tenga que vivir con esto si quiero seguir usando schemabinding y actualizaciones de script ...

Respuesta

2

Puede al menos eliminar el "control si g y un error "paso por consultar algunas funciones de gestión dinámica y vistas del sistema para encontrar sus dependencias. This article da una explicación decente de cómo hacerlo. Más allá de eso, creo que tienes razón, no puedes tener tu pastel y comértelo también con un esquema vinculante.

También tenga en cuenta que eliminar/crear vistas hará que pierda todos los permisos que se otorgaron en esos objetos, por lo que esos permisos también deberían incluirse en sus secuencias de comandos.

+1

Oh, bueno. Supongo que viviré con eso. Lo ideal sería lo siguiente: a) ningún mensaje de error si la actualización de la tabla no afecta realmente a las vistas (por ejemplo, agregar una nueva columna no debería afectar las vistas de solo lectura en esta tabla) b) mensaje de error si la tabla actualiza vistas (por ejemplo, soltar una columna que se utiliza en una vista) Pero supongo que MSSQL simplemente no funciona de esa manera (posiblemente por buenas razones ...) ¡Gracias por el recordatorio de permisos! –

Cuestiones relacionadas