6

适用于 SQL Server 2008 的 Visual Studio 2008 数据库项目

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

该项目有一个 Always-Recreate-Database 选项:删除现有数据库并每次创建一个新的 hot-from-the-oven 数据库。

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

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

因此,我必须关闭复制。把它放在预部署中是合乎逻辑的。

VS2008 很快就抹去了我脸上得意的笑容。如果选中 Always-Recreate-Database,则它会放置脚本以删除并重新创建数据库,然后放置我的 Pre-Deployment 脚本,然后是其他所有内容。

我有什么办法可以更改数据库项目的模板,以便在任何部署发生之前执行预部署 SQL 脚本在它们要执行的地方执行。

4

1 回答 1

4

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

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

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

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

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

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

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

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

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

于 2009-08-04T19:33:16.470 回答