sql-server - 两个 dacpac 文件之间的详细差异
问题描述
我正在使用 sqlpackage 实用程序和 MSBuild 从我们的数据库和数据库项目中生成源和目标 .dacpac 文件。我知道我可以生成发布脚本,甚至可以生成部署报告,但这些报告只是高级别的。我想要做的是能够提供一份报告,准确地向我展示两个 dacpacs 之间的不同之处。例如,生成的发布脚本和 DeployReport.xml 向我显示特定存储过程已更改并将被覆盖,但它没有显示存储过程的哪些行已更改,因为它是一个非常长的存储过程,手动解决这个问题需要相当多的努力。
到目前为止,我已经尝试从 .dacpac 文件中提取包含的 model.xml 并使用 Diff 工具将我的 source.dacpac 中的 model.xml 与 target.dacpac 进行比较,但如果是从实时数据库和其他从数据库项目构建的,那么不幸的是,它们差异太大,无法向我展示有用的视觉效果。
在 Visual Studio 中,我当然可以打开“架构比较”工具并以这种方式比较我的 dacpac,但这太手动了,我正在寻找更自动化的解决方案。至少,从命令行触发此“架构比较”的方法会很好。
比较两个 dacpac 文件并详细地向我展示它们之间的差异的最佳方法是什么?即这 5 个存储的 procs 发生了变化,并直观地向我展示了 5 个 procs 中的每一个中哪些行发生了变化?我可以将某种解决方案粘在一起,但我不能购买任何第三方工具,我被 MS 提供的东西和我自己有限的能力所困。
解决方案
不是最终解决方案,而是一种可能的方法:
# build publish script from old to new dacpac
SqlPackage.exe /a:Script /sf:old.dacpac /tf:new.dacpac /tdn:mydb /OutputPath:back.sql /Profile:publish.xml
# from new to old
SqlPackage.exe /a:Script /sf:new.dacpac /tf:old.dacpac /tdn:mydb /OutputPath:forth.sql /Profile:publish.xml
# compare them this way or another
Compare-Object -DifferenceObject (Get-Content ./forth.sql) -ReferenceObject (Get-Content ./back.sql) -SyncWindow 5 -IncludeEqual`
| % { Write-Output ("{0} {1}" -f $_.SideIndicator, $_.InputObject); } | Out-File ./diff.txt
推荐阅读
- qt - QEventLoop 没有同步等待 QNetworkReply 完成
- linux - Kubernetes pod 内存不会随着 supervisord 进程而减少
- elasticsearch - Elasticsearch 查询从 JSON 中获取属性值
- sql-server - 用于连接 MS SQL 服务器的 Spring Quartz 配置
- python - 对列表中的浮点数求和
- erlang - 我在 erlang 中有一个接收块。如果我的 gen-server 中有超时,它会返回 ok 但不是实际值。如何返回实际值
- mongoose - 完整的用户资料
- ssas - MDX :将 SELECT 转换为 WITH 语句
- python - 如何在所有带有pylint的目录中按名称忽略文件?
- powershell - 搜索所有以“CA”开头且带有变量的 Active Directory 用户