数据库项目中的预部署

时间:2009-08-04 18:06:32

标签: sql sql-server visual-studio-2008 database-project

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

  1. 在.dbproj文件中定义PreDeployEvent属性。
  2. 在.dbproj文件中定义BeforeDeploy目标。
  3. 我认为,这些都应该在正确的时间点执行。

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

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

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

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

    顺便说一下,有很多自由可用的自定义任务,例如www.msbuildextensionpack.com的那些。

答案 1 :(得分:2)

还要看一下这篇文章Pre deployment scripts