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



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

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

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

我想知道如何使用 ReadyRoll 根据条件运行脚本。该脚本当前驻留在"迁移"文件夹中...我不确定它是否需要重新定位。

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

  • https://trello.com/c/ZzZr8Tkm/153-180-allow-migrations-to-be-conditionally-deployed-sqlcmd-packages-only
  • https://readyroll.uservoice.com/forums/204125-readyroll-product-feedback/suggestions/7374679-synchronize-transactional-data-as-part-of-migratio

我已经能够通过在我想运行的 sql 上方添加一个 if 语句来使其工作,该语句镜像迁移标签指定的保护。

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

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

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

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

唯一的事情是,您需要在ReadyRoll项目(SQLCMD变量(和八达通中创建同名"环境"的变量。并为每个环境分配单独的值(开发、测试、生产等(。

最新更新