【发布时间】:2026-02-13 06:00:01
【问题描述】:
我有一个使用 .net 2015 mvc 5 应用程序的 sql server 数据库。我的数据库代码是使用 SSDT 项目进行源代码控制的。我正在使用 SqlPackage.exe 使用由 SSDT 项目构建过程创建的 .Decpac 文件将数据库部署到暂存环境。这是使用 VSTS build 的 powershell 任务完成的。 通过这种方式,我可以以源代码控制的方式更改数据库架构。现在的问题是关于数据库的主数据插入。
我使用一个 sql 脚本文件,该文件具有作为部署后脚本执行的数据插入脚本。该文件也是源代码控制的。
问题在于,最初我们已经准备好插入脚本以针对第一个版本的 sprint(以 sprint n 为基础)。但是在下一个冲刺中,如果更新一些主数据,那么应该如何更新主数据插入:
- 在脚本文件的最后添加新的更新/插入查询?但在这种情况下,部署后脚本将由 CI 执行,它会尝试在后续构建中一次又一次地插入数据,如果我们在该数据库的主表中进行了一些架构更改,最终将失败。
- 更新数据插入脚本中的现有插入查询。在这种情况下,我们也会遇到麻烦,因为在构建后事件中,整个数据将被重新插入。
- 为每个脚本维护单独的数据插入脚本,并将脚本引用更新为 SSDT 构建后事件的新文件。这种方法需要手动操作并且容易出错,因为开发人员必须记住这个过程。这种方法的另一个问题是,如果我们需要在分布式服务器场中再设置 1 个数据库服务器。多个数据插入脚本会抛出错误,因为 SSDT 具有最新的架构,并且它将创建一个具有相同架构的数据库。但较旧的数据脚本具有先前模式的数据插入(在以后的 sprint 中更改的 sprint wise db 模式)
因此,任何人都可以建议人工操作较少但可以涵盖所有上述情况的最佳方法。
谢谢 鲁彭德拉
【问题讨论】:
-
我们使用了多个脚本来检查这些值是否已经在表中。如果有重大更改,您可能需要对脚本进行版本控制以适用于较新版本的架构。要么,要么你对你的 dacpacs/项目进行版本控制,然后逐步发布。
-
你得到了帮助你解决问题的答案吗?如果是,您可以将其标记为答案。它会帮助其他有类似问题的人。
-
嗨@Marina-MSFT 我还没有最终确定。最初,我的观点是使用 Sprint 明智的 SSDT 文件和每个 sprint 的主数据文件作为后期构建脚本。如果需要完整部署,我将以增量方式运行所有 SSDT。但我需要测试一下。
-
好问题:)
标签: sql-server continuous-integration sql-server-data-tools azure-pipelines database-deployment