Sql server 2012 使用ReadyRoll的迁移脚本中的条件逻辑

Sql server 2012 使用ReadyRoll的迁移脚本中的条件逻辑,sql-server-2012,readyroll,Sql Server 2012,Readyroll,我有一个使用ReadyRoll的项目和一个带有迁移头的脚本,该迁移头使用一个条件来运行脚本,或者不基于项目属性($(环境)的SQLCMD变量部分中定义的变量 —— 当我将此项目部署到一个干净的sql server实例时,无论指定什么环境,它都会部署此脚本 我想知道如何基于ReadyRoll的条件运行脚本。 脚本当前位于Migrations文件夹中…我不确定是否需要重新定位它 到目前为止,我已经查看了这些链接,但它们没有帮助: 我已经能够通过在我想要运行的sql之上添加一个if语句来实现这

我有一个使用ReadyRoll的项目和一个带有迁移头的脚本,该迁移头使用一个条件来运行脚本,或者不基于项目属性($(环境)的SQLCMD变量部分中定义的变量

——
当我将此项目部署到一个干净的sql server实例时,无论指定什么环境,它都会部署此脚本

我想知道如何基于ReadyRoll的条件运行脚本。 脚本当前位于Migrations文件夹中…我不确定是否需要重新定位它

到目前为止,我已经查看了这些链接,但它们没有帮助:


我已经能够通过在我想要运行的sql之上添加一个if语句来实现这一点,该语句反映了迁移标记指定的保护

最后一段代码如下所示:

-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" />
if '$(Environment)' = 'DEV'
BEGIN
  <some sql scripts here>
END
——
如果“$(环境)”='DEV'
开始
结束

这种方法非常适合八达通部署:

——


唯一的问题是,您需要在ReadyRoll项目(SQLCMD变量)和Octopus中创建同名“Environment”的变量,并分配单独的值(DEV、TEST、PROD等)对于每个环境。

谢谢您的回复,变量是八达通的,并且已经设置好了。我会再次检查以确定。您指的是哪个版本,或者应该在所有版本上工作?
-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" Condition="'$(Environment)' = 'DEV'" />

<some sql scripts here>