2009-08-04 23 views
6

proyecto de base de datos de Visual Studio 2008 para SQL Server 2008previa al despliegue en el proyecto de base de datos

El proyecto cuenta con marcadores de posición para Pre-Despliegue y guiones post-implementación de SQL. Funcionan, bueno, la mayor parte del tiempo de todos modos.

El proyecto tiene la opción de Siempre-Recrear-Base de datos: elimine la base de datos existente y cree una nueva base de datos de "calentar-desde-el-horno" en todo momento.

Cuando despliego mi base de datos, todo el script SQL se junta y se ejecuta.

Mi base de datos se utiliza para la replicación, y como parte del script Post-Deployment, designo el servidor como una distribución, creo la replicación y le agrego artículos.

Por lo tanto, tengo que cerrar la replicación. Y el lugar lógico para poner eso fue en Pre-Deploy.

VS2008 borró la sonrisa petulante de mi cara con bastante rapidez. Si Always-Recreate-Database está marcado, coloca la secuencia de comandos para soltar y volver a crear la base de datos, luego coloca mi secuencia de comandos Pre-Deployment y luego todo lo demás.

¿Hay alguna manera de que cambie la plantilla del proyecto de la base de datos para que los scripts de SQL de preimplementación se ejecuten donde se supone que se ejecutan? Antes de ocurre cualquier implementación de.

+0

me deje engañar por el nombre antes del despliegue también. –

Respuesta

3

Esto puede no ser exactamente lo que está buscando, pero podría ayudarle a solucionar su problema. después de un vistazo rápido, creo que la secuencia de las secuencias de comandos antes y después de la implementación puede ser demasiado difícil de cambiar.

Según tengo entendido, hay algunos ganchos en el proyecto de compilación que le permitirán ejecutar su propio código antes de que comience la implementación.

  1. Defina una propiedad PreDeployEvent en su archivo .dbproj.
  2. Defina un objetivo BeforeDeploy en su archivo .dbproj.

Cualquiera de estos debe ejecutarse en el momento correcto, creo.

Si utiliza la propiedad PreDeployEvent, deberá especificar la línea de comando única que se ejecutará. Un crudo ejemplo:

<PropertyGroup> 
    <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent> 
</PropertyGroup> 

Si desea más control, utilice el objetivo BeforeDeploy que permite llevar a cabo una o más tareas msbuild personalizados. He aquí otro ejemplo de crudo:

<Target Name="BeforeDeploy"> 
    <Message Text="BeforeDeploy" Importance="high" /> 
</Target> 

Por cierto, hay un montón de tareas personalizadas libremente disponibles, siendo un ejemplo los que están en www.msbuildextensionpack.com.

+0

Traté de poner el PropertyGroup en todo tipo de lugares en el proyecto, pero nada ha funcionado hasta ahora. ¿Hay alguna muestra que conozcas con la que pueda jugar? –

+1

http://pastie.org/575352 - las primeras líneas deberían ser suficientes. Comprueba la ventana de resultados después de una implementación: en mi VSTS2008 obtengo una salida diciendo que la base de datos existe antes y después de la implementación (lo que indica que el comando se ejecuta antes de que el DB se descarte y recree). –

Cuestiones relacionadas