在Visual Studio 2012中,我们在Schema Compare
的SQL Server Database Project
(DbProject)项目中有SSDT帮助
source
与target
target
以使其与source
其中
我的问题是,是否可以使用命令行/ API接口来调用此功能?
答案 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)
答案 2 :(得分:2)
目前,获取模式比较结果的API访问权限的唯一方法是编写在DacServices API中的部署/脚本操作期间运行的部署计划修饰符/执行程序。这使您可以检查将dacpac与数据库进行比较时生成的部署计划,但它还可以访问代表模式比较操作的ModelComparisonResult,该操作在传递给OnExecute的上下文对象中可用。贡献者的方法。我刚刚编写了一个涵盖此过程的blog post,可能对您有用 - 看一下,希望它能帮助您开始。
答案 3 :(得分:1)
我前一段时间关于这个话题wrote a few lines。希望你发现它们很有用。
简而言之,您正在寻找的工具是vsdbcmd.exe
,它由Ultimate Studio和Premium版本的Visual Studio分发。