什么定义了 VS2012 数据库项目中脚本执行的顺序?

Posted

技术标签:

【中文标题】什么定义了 VS2012 数据库项目中脚本执行的顺序?【英文标题】:What defines the order of script execution in VS2012 Database Project? 【发布时间】:2014-03-03 14:48:23 【问题描述】:

数据库项目中有几种类型的脚本:PreDeploymentPostDeploymentBuildNotInBuild。 前两个只能存在于一个副本中,而构建脚本可能非常丰富。

我找不到有关执行 buid 脚本的时间和顺序的信息。 这是否意味着构建脚本不能依赖于执行顺序或者我错过了什么?

【问题讨论】:

【参考方案1】:

您可以将一个脚本标记为“PreDeployment”,将一个脚本标记为“PostDeployment”。这些脚本将使用 SQLCMD 语法将其他脚本(构建类型“none”)包含在该过程中。

预部署脚本将被编译为包含按您指定的顺序包含的所有脚本。 Post-deploy 脚本将以相同的方式编译。

要在部署前或部署后脚本中包含文件,请使用如下语法:

:r .\IncludeThisScript.sql

当您发布时,会先运行 Pre-deploy 脚本,然后进行 DB 更改,然后再运行 post-deploy 脚本。还值得注意的是,DB Change 脚本是在不知道部署前/部署后脚本将做什么或已经做什么的情况下生成的。如果您在预部署脚本中创建表并尝试在项目中创建它,则项目可能会失败,因为该表已经存在。

【讨论】:

那么构建脚本呢? 如果您指的是更改数据库的实际脚本,那完全由内部控制。据我所知,要影响该顺序,您唯一能做的就是手动编辑生成的脚本。不完全做某事通常很好。 那么最好创建不依赖执行顺序的构建脚本... 好吧,您不必创建构建脚本。您处理部署前和部署后脚本。主构建脚本是自动生成的。您可以控制前后发生的事情以及顺序。有时您需要控制该顺序 - 例如当您在相关的表中插入数据时,或者如果您需要按特定顺序转换数据。 但是我可以添加 Build 类型的新脚本。至少 VS 允许。

以上是关于什么定义了 VS2012 数据库项目中脚本执行的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

VS2012 Post-Deployment 脚本引用了其他几个脚本

我可以从 TFS CI Build 更改 VS2010 数据库项目的部署脚本的位置吗

数据库项目 VS 2012 跳过发布安全

VS 2013 数据库项目:基于构建配置运行的部署后脚本

让用VS2012/VS2013编写的程序在XP中顺利执行

架构比较和部署脚本