SSDT SQL Server数据库项目中的模式比较的命令行/ API?

Nam*_* VU 26 database api command-line synchronization sql-server-data-tools

在Visual Studio 2012中,我们必须Schema CompareSSDTSQL Server Database Project(DbProject)项目,该项目帮助

  1. 比较sourcetarget
  2. 更新target以使其与...相同source

哪里

  1. 源和目标可以是数据库,DbProject项目或.dacpac文件
  2. 可以通过更新操作生成的脚本完成更新

我的问题是,是否有可能获得命令行/ API接口来调用此功能?

小智 45

SOURCE数据库 sqlpackage.exe/a:Extract/scs:Server =%Server%; Database = AspBaselineDB; /tf:%DriveSpec%\%DacPath%\%AspBaselineDB%_baseline.dacpac

TARGET数据库 sqlpackage.exe/a:Extract/scs:Server =%Server%; Database =%AspTargetDB-2%; /tf:%DriveSpec%\%DacPath%\%AspTargetDB%.dacpac

比较和生成Delta脚本 sqlpackage.exe/a:脚本/sf:%DriveSpec%\%DacPath%%%AspBaselineDB%_baseline.dacpac /tf:%DriveSpec%\%DacPath%\AspNetDb\%AspTargetDB%.dacpac/tdn :aspTargetdb /op:%DriveSpec%\%SqlPath%\AspNetDb\AspDbUpdate.sql

执行脚本 sqlcmd.exe -S%Server%\ aspnetdbAmexDev -i%DriveSpec%\%SqlPath%\ AspNetDb\AspDbUpdate.sql

我在CMD脚本中执行此操作,因为我们的IT部门不允许使用未签名的PowerShell脚本,也不会购买证书.即使从TFS 2012 Team Builds调用它或只是以管理员身份从VS命令提示符执行.CMD脚本,这也可以完美地工作.

注意!

在脚本中添加以下SET:SET PATH =%PATH%; C:\ Program Files(x86)\ Microsoft SQL Server\110\DAC\bin

另外:你可以看到我设置了路径变量.我这样做是因为我接触了50种数据库,这是我发现生成delta脚本和更新DEV和TEST数据库的唯一一致方式.

  • 我们还可以比较特定的用户表数据并生成脚本吗? (2认同)

Kev*_*ane 3

目前,获取架构比较结果的 API 访问权限的唯一方法是编写在 DacServices API 中的部署/脚本操作期间运行的部署计划修改器/执行器。这使您可以检查在将 dacpac 与数据库进行比较时生成的部署计划,但它还可以访问表示架构比较操作的ModelComparisonResult ,该操作在传递给贡献者的OnExecute方法的上下文对象中可用。我刚刚写了一篇博客文章,介绍了这个过程,可能对您有用 - 看看它,希望它能帮助您入门。