You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CI环境中使用MSBuild生成SSDT项目SQL变更脚本?

解决方案

核心方案思路

这是SSDT项目在CI流程中生成增量脚本的标准官方方案:无需连接真实数据库,仅通过当前版本新生成的dacpac与上一次成功构建归档的dacpac做结构对比,即可自动生成仅包含两次版本差异的增量SQL脚本。

具体CI配置步骤

  • 第一步:配置构建制品持久化:在你的TFS CI构建定义中,新增「发布构建制品」任务,将SSDT项目构建输出的*.dacpac文件作为制品归档,保留所有成功构建的制品。
  • 第二步:拉取上一版本基准dacpac:在构建流程最开始新增「下载构建制品」任务,选择当前构建对应的分支,拉取该分支最近一次成功构建的dacpac制品到本地构建目录。如果是该分支首次构建,可提前上传生产环境当前对应的dacpac作为初始基准,或直接生成全量脚本作为首次发布版本。
  • 第三步:构建当前版本SSDT项目:使用标准MSBuild任务编译SSDT项目,生成当前版本最新的dacpac文件。
  • 第四步:调用sqlpackage生成增量脚本:新增命令行任务,执行以下命令:
sqlpackage.exe /Action:Script /SourceFile:"$(当前版本dacpac路径)" /TargetFile:"$(上一版本dacpac路径)" /OutputPath:"$(构建输出目录)\增量变更脚本.sql" /p:GenerateSmartDefaults=true /p:DropObjectsNotInSource=false

常用参数说明:

  • /p:GenerateSmartDefaults=true:新增非空字段时自动生成默认值,避免表有存量数据时更新失败
  • /p:DropObjectsNotInSource=false:不会删除目标库中存在但当前SQL项目中不存在的对象,可根据实际需求调整
  • 第五步:发布增量脚本作为制品:将生成的增量变更脚本和本次dacpac一起作为构建制品归档,用于后续分发发布。

效果验证

按照你给出的示例,将版本1生成的dacpac作为目标基准、版本2生成的dacpac作为源,执行上述sqlpackage命令后,就会自动生成你期望的仅包含ALTER TABLE加字段、ALTER PROCEDURE更新存储过程的增量脚本,不需要手动编写变更逻辑。

内容的提问来源于stack exchange,提问作者Dmitry Mishin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:48:01