powershell – 使用DACFx 3.0 API升级DACPAC – 如何检查现有数据库的当前DAC版本?

我目前正在重写我的团队的数据库部署Power
shell脚本,以使用DACFx 3.0 API而不是2.0.我已经设法使用新的Microsoft.SqlServer.Dac.DacServices控制器类使DACPAC升级成功.

剩下的唯一问题是:如何从现有数据库中获取当前的DACPAC版本号?

作为我们部署脚本的一部分,我们将其与我们要升级到的DACPAC版本进行比较,以确定是否需要部署.这也用于决定是否运行与数据库相关的测试,这样我们就可以减少构建上的大量时间.

旧的DacFx2.0 API存在于Microsoft.SqlServer.Management.Dac命名空间中,因此在旧的Powershell脚本中,我们只是从数据库连接创建了一个DacStore对象,并从中获取Version属性:

我们的老POWERSHELL SCRIPT

$dacStore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
Write-Host "The following data-tier applications (instances) exist in the DAC store:"
foreach($dacInstance in $dacStore.DacInstances) 
{
    Write-Host Instance Name: $dacInstance.Name
    Write-Host DAC Type Application Name: $dacInstance.Type.Name
    Write-Host DAC Type Version: $dacInstance.Type.Version <--- **** this is what I need ****
}
...

现在3.0中的问题,API存在于Microsoft.SqlServer.Dac命名空间中,而且“不是使用以前版本的DacStore和DacExtractionUnit类,大多数都已经重构为全新的DacServices控制器类.(src)”

我还没有在DacServices类中找到相当于DacStore的东西,所以到目前为止我还不知道如何检索当前的DAC版本.我已经尝试搜索MSDN文档,但他们所有的Powershell部分仍然引用了旧的DACFx2.0 API. (例如:here).

如果有人可以帮助我,将不胜感激.谢谢!

最佳答案 刚收到MSFT的回复:

The Dac 3.0 API doesn’t have this capability as you’ve discovered. Use T-SQL to select this data directly from dbo.sysdac_instances.

事实上它似乎是唯一的方式:http://msdn.microsoft.com/en-us/library/ee240830.aspx
所以我现在要查询该视图,虽然我真的很想看到它在某些时候被带入DACFx API.请注意,视图dbo.sysdac_instances位于master数据库中,因为SQL Azure中不存在msdb.

点赞