¿Puede un proyecto de base de datos VS2010 crear scripts de implementación que se puedan volver a ejecutar?

Estoy usando Proyectos de base de datos VS2010 como una forma de versionar nuestro código de base de datos entre versiones de lanzamiento. Hasta ahora, la solución proporcionada parece buena; sin embargo, hay un problema que me pregunto si alguien más se ha encontrado.

Los scripts de actualización generados desde la vista de comparación de esquemas no se pueden volver a ejecutar. Como estándar, normalmente me aseguro de que todos los scripts de lanzamiento de mi base de datos se puedan volver a ejecutar, en caso de que haya algún problema al implementar el script de lanzamiento en un servidor.

¿Alguien sabe si hay una forma de configurar VS2010 para crear scripts de actualización que se puedan volver a ejecutar, es decir, eliminar sprocs solo si existen, etc.?

preguntado el 16 de mayo de 11 a las 16:05

Todavía no he encontrado una solución a esta pregunta. Edito manualmente los scripts después de que VS los haya generado. -

4 Respuestas

Podría echar un vistazo Empaquetador SQL de RedGate

contestado el 16 de mayo de 11 a las 22:05

Eso no produce scripts que se puedan volver a ejecutar. Toma un script y crea un exe. Sin embargo, si se ejecuta en una transacción, el script se revertirá si falla. - David Atkinson

Una vez que haya realizado la comparación de esquemas y haya sincronizado su modelo de proyecto de base de datos con su base de datos, puede compilarlo para obtener el archivo .dbschema para su base de datos.

Esto luego se puede usar con vsdbcmd para crear un script de cambio para actualizar una versión anterior de la base de datos para que coincida con la versión definida en el archivo .dbschema. Esto le proporcionará su secuencia de comandos de actualización que se puede volver a ejecutar, además, si falla, le dirá por qué falló y no se realizarán cambios en su base de datos de destino. Sin embargo, solo será reutilizable cuando se pase de la misma versión de base de datos a la misma versión de base de datos.

Una de las principales razones por las que pasamos a proyectos de bases de datos (de los scripts generados de comparación de sql de redgate) fue para evitar este problema. Todos nuestros scripts de actualización fueron de una versión específica a una versión específica. Uno de los principales beneficios de los proyectos de base de datos es que no es necesario tener scripts que se puedan volver a ejecutar. Tiene el archivo .dbschema que define cómo debe terminar el objetivo y deja que VSDBCMD haga todo el trabajo. Ni siquiera solemos generar los scripts, usamos VSDBCMD para actualizar la base de datos directamente.

Si sigues esta ruta http://blogs.msdn.com/b/bahill/archive/2009/02/21/deploying-your-database-project-without-vstsdb-installed.aspx tiene una lista de requisitos previos necesarios para ejecutar VSDBCMD fuera de su entorno de desarrollo.

Respondido el 10 de junio de 11 a las 16:06

El inconveniente de vsdbcmd es que tendrá que saltar por encima de su cabeza para agregar columnas no NULL a una tabla. Especialmente si tiene muchos datos allí.

Respondido 20 Oct 12, 14:10

En Visual Studio 2015 (y posiblemente versiones anteriores) puede configurar el script de publicación para incluir una sola transacción con manejo de errores. Vea abajo:

Publicación SSDT con "Incluir secuencias de comandos transaccionales"

Envolver el script normal en una transacción más grande no funcionaría para mí porque el script introduce el manejo de errores sqlcmd fuera de los scripts previos / posteriores a la implementación que están disponibles dentro del proyecto de Visual Studio:

:on error exit

Esto le impide usar try-catches para manejar los errores de manera efectiva y le deja tener que revertir la transacción manualmente.

Nota: los scripts previos y posteriores a la implementación se ejecutan afuera la transacción generada por la configuración "Incluir scripts transaccionales", por lo que deberá administrarlos usted mismo

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.