0

如何在数据库项目中使用特定于环境的表值,并确保它们仅部署到您使用发布管理部署到的环境中?我们一直在使用发布管理一段时间,但仅限于.NET代码。我们对DACPAC领域有些新鲜,但发现通过发布管理来设置和使用它很容易。但是,现在我们要将此功能扩展到每个环境具有配置变量的表。我们如何构建数据库项目的这一部分,并确保每个环境都有其独特的数据版本?数据库项目在多个环境?

回答

1

使用SSDT发布数据库模式和参考数据;不要用它来管理环境设置。

就我个人而言,我会(并且)运行一个配置了环境特定值的部署后辅助脚本。这与在Web应用程序部署后的web.config文件中输入正确的值没有区别。这是您在部署工具中管理的内容。

+0

感谢您的反馈意见。在我们的例子中,我们的数据库中有特定的字段指向特定于环境的位置(UNC路径)和/或客户特定的信息,这些信息不同于TEST到PROD;网址和/或ID不受我们系统控制。所以我们的挑战是如何运行特定于每个环境的部署后脚本。正如您从其他答案中将看到的,我们最终发现了SQL命令变量和发布配置文件,以帮助我们确定要运行哪些脚本。 –

+0

我们遇到的问题是SSDT想要“修复”那些不在您的项目中的所有用户/角色分配。我们不希望那些在项目中,因为他们不应该在生产。 –

0

忽略问题的发布管理部分(因为它取决于您使用的模式以及是否将配置变量存储在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或任何其他工具。

+0

谢谢。这基本上是我昨天发布后最终弄清楚的。关键是弄清楚如何使用可以与发布文件结合使用的SQL命令变量。我已经给了你一个赞成票,但对于Stack Overflow来说,它是公开露面的。 –