Azure DevOps Ubuntu代理下执行Azure SQL DDL选SQLCMD还是SQLPackage?
Azure DevOps Ubuntu代理执行Azure SQL DDL脚本工具选型建议
核心选型结论
根据你的使用场景二选一即可,不需要额外找其他工具:
- 仅执行现成独立DDL脚本:优先选
sqlcmd - 需要数据库版本管控、增量部署:优先选
SqlPackage
选型原因说明
sqlcmd适用场景及优势
- 轻量化易安装:Ubuntu环境下直接通过apt安装
mssql-tools包即可,依赖极少,添加到Docker构建代理镜像后占用空间很小,不会拖慢流水线启动速度 - 使用成本低:执行脚本语法非常简单,单脚本执行命令示例如下:
多脚本只需要批量调用即可,流水线配置非常好上手sqlcmd -S your-sql-server.database.chinacloudapi.cn -d your-db-name -U db-admin -P your-password -i your_ddl_script.sql - 原生SQL兼容性好:不需要对已有的DDL脚本做任何格式转换,写好的SQL直接就能执行,适合临时、零散的DDL变更场景
SqlPackage适用场景及优势
- 支持增量智能部署:可以自动比对当前Azure SQL的现有Schema和你提供的dacpac包/源脚本的差异,自动生成兼容的增量DDL语句,不需要人工编写升降级脚本,大幅降低迭代场景下的出错概率
- 内置变更管控能力:支持生成预执行变更报告、模拟执行(不实际修改数据库),可以提前发现依赖冲突、语法兼容问题,避免DDL执行中途失败导致数据库结构不一致,适合生产环境的正式变更
- 适配数据库全生命周期管理:可以和数据库项目(SSDT)联动,实现Schema的版本化管控,适合迭代频繁、变更流程规范的项目
其他工具说明
如果你的项目本身用Entity Framework Core开发,也可以用EF迁移命令执行DDL,但属于和代码栈绑定的场景,通用DDL执行需求用上面两个工具已经完全覆盖。
内容的提问来源于stack exchange,提问作者romanzdk
相关产品推荐
相关产品推荐

