如何在数据库项目中使用特定于环境的表值,并确保它们仅部署到您使用发布管理部署到的环境中?我们一直在使用发布管理一段时间,但仅限于.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. 多个项目到SQLite数据库
- 5. 环境数据库设计
- 6. Rails中一个环境中的多个数据库适配器
- 7. 通过Sitecore包在多个环境中删除Sitecore项目
- 8. Visual Studio参考不在多个项目环境中复制
- 9. 在JavaScript项目中对多个环境使用NODE_ENV
- 10. 摇篮嵌套,多项目,共享库环境设置
- 11. 保持多个环境中的开发数据库同步
- 12. 动态环境文件(多个数据库)和工匠命令
- 13. 为不同的环境设置多个数据库
- 14. PHP与git&phpfog多个数据库环境
- 15. 如何让webapp使用Git处理多个数据库环境
- 16. 数据在多线程环境
- 17. 分面项目Eclipse环境
- 18. 在rails项目中使用两个或多个数据库
- 19. 在多个项目中打开一个SQL Express数据库
- 20. 如何在多数据库环境中使用Dapper?
- 21. .htaccess在多个环境
- 22. 配置Play! 2个模型在多个数据库环境中使用特定数据库
- 23. IntellijIDEA中的一个项目的多种开发环境
- 24. 为Octopus Deploy中的多个项目定义角色和环境
- 25. 针对多个项目/环境的Firebase配置
- 26. 为多个项目和环境组织AWS Lambda功能
- 27. 在多环境
- 28. CMS /电子商务asp.net项目:一个数据库还是多个数据库?
- 29. 多个环境2
- 30. Docker多个环境
感谢您的反馈意见。在我们的例子中,我们的数据库中有特定的字段指向特定于环境的位置(UNC路径)和/或客户特定的信息,这些信息不同于TEST到PROD;网址和/或ID不受我们系统控制。所以我们的挑战是如何运行特定于每个环境的部署后脚本。正如您从其他答案中将看到的,我们最终发现了SQL命令变量和发布配置文件,以帮助我们确定要运行哪些脚本。 –
我们遇到的问题是SSDT想要“修复”那些不在您的项目中的所有用户/角色分配。我们不希望那些在项目中,因为他们不应该在生产。 –