关于sql:数据库项目中的预部署

Pre-Deployment in Database project

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

该项目具有用于部署前和部署后SQL脚本的占位符。它们可以正常工作-不管怎么说,在大多数情况下都是如此。

该项目有一个"始终重新创建数据库"选项:删除现有数据库并每次创建一个新鲜的烤箱内热数据库。

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

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

因此,我必须关闭复制。而将其放置在预部署中则是合乎逻辑的。

VS2008很快擦掉了我脸上自鸣得意的笑容。如果选中了Always-Recreate-Database,则它将放置脚本并重新创建数据库,然后放置我的Pre-Deployment脚本,然后放置其他所有内容。

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


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

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

  • 在您的.dbproj文件中定义一个PreDeployEvent属性。
  • 在.dbproj文件中定义一个BeforeDeploy目标。
  • 我认为其中任何一个都应该在正确的时间执行。

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

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

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

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

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