visual-studio - 使用 Visual Studio ssdt 为不同的发布配置文件部署不同的种子数据?

标签 visual-studio sql-server-data-tools database-project seeding publish-profiles

是否可以使用 Visual Studio Sql Server 数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?

我们知道您可以使用部署后脚本来部署种子数据。
我们知道您可以使用发布配置文件工具部署到不同的环境。
我们不知道的是如何将不同的种子数据部署到不同的环境中。

我们为什么要这样做?

  • 我们希望能够做到这一点,这样我们就可以拥有一小部分明确的种子数据用于单元测试。
  • 我们需要更广泛的数据集部署到测试团队的环境中,以便测试团队针对
  • 测试整个应用程序。
  • 我们需要一组特定的预生产环境的种子数据。
  • 最佳答案

    有几种方法可以实现这一点,第一种方法是检查部署后脚本中的环境,例如..

    if @@servername = 'dev_server'
    begin
       insert data here
    end
    

    更简洁的版本是为每个环境使用不同的脚本文件,并通过 :r import sqlcmd 脚本导入它们,这样您就可以拥有:
  • PostDeploy.sql
  • DevServer.sql
  • QAServer.sql

  • 然后
    if @@servername = 'dev_server'
    begin
       :r DevServer.sql
    end
    if @@servername = 'qa_server'
    begin
       :r QAServer.sql
    end
    

    您需要确保 .sql 文件的路径正确,并使用 dacpac 复制它们。

    您不必使用 @@servername 您可以使用 sqlcmd 变量并将它们传递给每个环境,这再次比硬编码的服务器名称更清晰。

    第二种方法是使 dacpac 情绪化,以根据您的环境更改 post delpoy 脚本,这是我的首选,并且作为 CI 构建的一部分效果最好,我的过程是:
  • 签到变更
  • 构建服务器构建 dacpac
  • 构建需要 dacpac,复制到 dev、qa、prod 等 env 文件夹
  • Build 将每个中的部署后脚本替换为 env 特定脚本

  • 我调用脚本 PostDeploy.dev.sql、PostDeploy.Qa.sql 等并将构建操作设置为“无”或将它们添加为“脚本,不在构建中”。

    要替换部署后脚本,您只需要使用 .net Packaging API 或者对于一些示例,请查看我的 Dir2Dac 演示,它可以做到这一点以及更多:

    https://github.com/GoEddie/Dir2Dac

    进一步来说:

    https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs
    var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");
    
         using (var reader = new StreamReader(_postDeployScript))
         {
                    reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
         }
    

    关于visual-studio - 使用 Visual Studio ssdt 为不同的发布配置文件部署不同的种子数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33733083/

    相关文章:

    visual-studio-2013 - 如何以编程方式对 VS 2013 SSDT 项目执行数据比较?

    c# - 如何在解决方案输出路径中包含来自构建的 dacpac 文件

    git - Visual Studio 2015,使用 GIT 扩展和数据库项目 .dbmdl 文件

    visual-studio - 数据库部署 (vsdbcmd.exe) : DatabaseName and DefaultDataPath are ignored?

    visual-studio - 无法将文件reference.dll复制到bin/reference.dll。该进程无法访问文件reference.dll,因为它正在被另一个进程使用

    sql-server - x64 中的 SSDT-BI SSIS?

    c++ - visual studio 是否有任何扩展来优化 C++ 代码单元测试?

    visual-studio-2010 - Visual Studio 数据库项目回滚脚本

    visual-studio - 从整个项目/解决方案中删除未使用的命名空间

    c# - 如何在 VS.NET winform 上启用设计标尺?