如何在数据库项目中使用特定于环境的表值,并确保它们仅部署到您使用发布管理部署到的环境中?我们一直在使用发布管理一段时间,但仅限于.NET代码。我们对DACPAC领域有些新鲜,但发现通过发布管理来设置和使用它很容易。但是,现在我们要将此功能扩展到每个环境具有配置变量的表。我们如何构建数据库项目的这一部分,并确保每个环境都有其独特的数据版本?数据库项目在多个环境?
回答
使用SSDT发布数据库模式和参考数据;不要用它来管理环境设置。
就我个人而言,我会(并且)运行一个配置了环境特定值的部署后辅助脚本。这与在Web应用程序部署后的web.config文件中输入正确的值没有区别。这是您在部署工具中管理的内容。
忽略问题的发布管理部分(因为它取决于您使用的模式以及是否将配置变量存储在RM等中),您当然可以将环境特定值传递到您的dacpac执行中(用于'postdeploy'数据脚本)使用标记化发布文件中定义的sqlcmd变量。 广义的过程是:在您的文章
使用标准sqlcmdvar语法部署脚本如插入到表中的值“$(my_env_var)”
更新数据库项目属性(SQLCMD标签),包括您的确保您的dacpac新的变量预计在执行时
生成publish.xml文件(现在应该有一个节点)
CREA值使用包含变换指令的publish.release.xml文件来更新节点的值以引入令牌,例如## my_env_var ##
更新您的数据库项目文件(.sqlproj),包括指令使用publish.release.xml的内容上构建变换publish.xml
它很长篇大论,但你从上面得到的是在你的构建输出中的dacapac +标记化的发布文件,准备被你的部署过程去迷惑和执行......这是RM或任何其他工具。
谢谢。这基本上是我昨天发布后最终弄清楚的。关键是弄清楚如何使用可以与发布文件结合使用的SQL命令变量。我已经给了你一个赞成票,但对于Stack Overflow来说,它是公开露面的。 –
- 1. 多环境设置中的C#数据库环境
- 2. Visual Studio 2010数据库项目部署到不同的环境
- 3. 数据库中的多个项目
- 4. 环境数据库设计
- 5. Rails中一个环境中的多个数据库适配器
- 6. Visual Studio参考不在多个项目环境中复制
- 7. 通过Sitecore包在多个环境中删除Sitecore项目
- 8. 在JavaScript项目中对多个环境使用NODE_ENV
- 9. 如何让webapp使用Git处理多个数据库环境
- 10. 保持多个环境中的开发数据库同步
- 11. PHP与git&phpfog多个数据库环境
- 12. 分面项目Eclipse环境
- 13. 在多个项目中打开一个SQL Express数据库
- 14. 在rails项目中使用两个或多个数据库
- 15. IntellijIDEA中的一个项目的多种开发环境
- 16. 为多个项目和环境组织AWS Lambda功能
- 17. 针对多个项目/环境的Firebase配置
- 18. 在多环境
- 19. CMS /电子商务asp.net项目:一个数据库还是多个数据库?
- 20. 多个环境2
- 21. Docker多个环境
- 22. TFS 2010/VS 2010:将数据库项目更改部署到测试环境
- 23. 由项目循环的环境
- 24. 在RecyclerView中显示Firebase数据库项目中的多个项目
- 25. Django项目多数据库配置settings.py
- 26. 如何在数据库列中存储多个项目?
- 27. 存储在多个数据库中的模型的Symfony项目
- 28. django多个数据库在一个项目中的多个组织
- 29. Spring JPA:在CI环境中测试具有多个数据库的DAO层
- 30. JAVA初始化数据库环境
感谢您的反馈意见。在我们的例子中,我们的数据库中有特定的字段指向特定于环境的位置(UNC路径)和/或客户特定的信息,这些信息不同于TEST到PROD;网址和/或ID不受我们系统控制。所以我们的挑战是如何运行特定于每个环境的部署后脚本。正如您从其他答案中将看到的,我们最终发现了SQL命令变量和发布配置文件,以帮助我们确定要运行哪些脚本。 –
我们遇到的问题是SSDT想要“修复”那些不在您的项目中的所有用户/角色分配。我们不希望那些在项目中,因为他们不应该在生产。 –