数据库项目中的预部署

Raj*_*ore 6 sql sql-server database-project visual-studio-2008

SQL Server 2008的Visual Studio 2008数据库项目

该项目具有预部署和后部署SQL脚本的占位符.他们工作 - 好吧,大多数时候反正.

该项目有一个Always-Recreate-Database选项:删除现有数据库,每次都创建一个新的热门数据库.

当我部署我的数据库时,整个SQL脚本被放在一起并执行.

我的数据库用于复制,作为部署后脚本的一部分,我将服务器指定为分发,创建复制并向其添加文章.

因此,我必须关闭复制.而这个合理的地方就是预部署.

VS2008很快就擦掉了脸上露出的笑容.如果选中了Always-Recreate-Database,那么它会删除脚本并重新创建数据库,然后放置我的预部署脚本,然后放置其他所有内容.

有没有办法让我更改数据库项目的模板,以便在任何部署发生之前执行预部署SQL脚本.

Dav*_*ray 4

这可能不完全是您想要的,但它可能会帮助您解决问题。快速浏览后,我认为部署前和部署后脚本的顺序可能很难更改。

据我了解,构建项目中有一些钩子允许您在部署开始之前执行自己的代码。

  1. PreDeployEvent在 .dbproj 文件中定义属性。
  2. BeforeDeploy在 .dbproj 文件中定义目标。

我认为,其中任何一个都应该在正确的时间点执行。

如果您使用该PreDeployEvent属性,则需要指定要执行的单个命令行。一个粗略的例子:

<PropertyGroup>
  <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

如果您想要更多控制,请使用BeforeDeploy允许您运行一个或多个自定义 msbuild 任务的目标。这是另一个粗略的例子:

<Target Name="BeforeDeploy">
  <Message Text="BeforeDeploy" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,有很多免费的自定义任务,例如www.msbuildextensionpack.com上的任务。