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

时间:2013-12-19 04:31:29

标签: database api command-line synchronization sql-server-data-tools

在Visual Studio 2012中,我们在Schema CompareSQL Server Database Project(DbProject)项目中有SSDT帮助

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

    其中

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

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

4 个答案:

答案 0 :(得分:39)

消息来源数据库 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数据库的唯一一致方法。

答案 1 :(得分:4)

你看过SqlPackage吗?

答案 2 :(得分:2)

目前,获取模式比较结果的API访问权限的唯一方法是编写在DacServices API中的部署/脚本操作期间运行的部署计划修饰符/执行程序。这使您可以检查将dacpac与数据库进行比较时生成的部署计划,但它还可以访问代表模式比较操作的ModelComparisonResult,该操作在传递给OnExecute的上下文对象中可用。贡献者的方法。我刚刚编写了一个涵盖此过程的blog post,可能对您有用 - 看一下,希望它能帮助您开始。

答案 3 :(得分:1)

我前一段时间关于这个话题wrote a few lines。希望你发现它们很有用。

简而言之,您正在寻找的工具是vsdbcmd.exe,它由Ultimate Studio和Premium版本的Visual Studio分发。