什么定义了 VS2012 数据库项目中脚本执行的顺序?
Posted
技术标签:
【中文标题】什么定义了 VS2012 数据库项目中脚本执行的顺序?【英文标题】:What defines the order of script execution in VS2012 Database Project? 【发布时间】:2014-03-03 14:48:23 【问题描述】:数据库项目中有几种类型的脚本:PreDeployment
、PostDeployment
、Build
和NotInBuild
。
前两个只能存在于一个副本中,而构建脚本可能非常丰富。
我找不到有关执行 buid 脚本的时间和顺序的信息。 这是否意味着构建脚本不能依赖于执行顺序或者我错过了什么?
【问题讨论】:
【参考方案1】:您可以将一个脚本标记为“PreDeployment”,将一个脚本标记为“PostDeployment”。这些脚本将使用 SQLCMD 语法将其他脚本(构建类型“none”)包含在该过程中。
预部署脚本将被编译为包含按您指定的顺序包含的所有脚本。 Post-deploy 脚本将以相同的方式编译。
要在部署前或部署后脚本中包含文件,请使用如下语法:
:r .\IncludeThisScript.sql
当您发布时,会先运行 Pre-deploy 脚本,然后进行 DB 更改,然后再运行 post-deploy 脚本。还值得注意的是,DB Change 脚本是在不知道部署前/部署后脚本将做什么或已经做什么的情况下生成的。如果您在预部署脚本中创建表并尝试在项目中创建它,则项目可能会失败,因为该表已经存在。
【讨论】:
那么构建脚本呢? 如果您指的是更改数据库的实际脚本,那完全由内部控制。据我所知,要影响该顺序,您唯一能做的就是手动编辑生成的脚本。不完全做某事通常很好。 那么最好创建不依赖执行顺序的构建脚本... 好吧,您不必创建构建脚本。您处理部署前和部署后脚本。主构建脚本是自动生成的。您可以控制前后发生的事情以及顺序。有时您需要控制该顺序 - 例如当您在相关的表中插入数据时,或者如果您需要按特定顺序转换数据。 但是我可以添加 Build 类型的新脚本。至少 VS 允许。以上是关于什么定义了 VS2012 数据库项目中脚本执行的顺序?的主要内容,如果未能解决你的问题,请参考以下文章
VS2012 Post-Deployment 脚本引用了其他几个脚本