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

Conditional logic in migration scripts using ReadyRoll

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

-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" Condition="'$(Environment)' = 'DEV'" />

<some sql scripts here>

当我将这个项目部署到一个干净的 sql 服务器实例时,无论我指定什么环境,它仍然会部署这个脚本。

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

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

我已经能够通过在 sql 我想要 运行 上面添加一个 if 语句来实现它,它反映了迁移标签指定的守卫。

最终的代码片段如下所示:

-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" />
if '$(Environment)' = 'DEV'
BEGIN
  <some sql scripts here>
END

这种方法非常适合 Octopus 部署:

-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" Condition="'$(Environment)' = 'DEV'" />

唯一的问题是您需要在 ReadyRoll 项目(SQLCMD 变量)和 Octopus 中创建具有相同名称的变量 "Environment"。并为每个环境分配单独的值(DEV、TEST、PROD 等)。