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

时间:2013-08-28 23:21:24

标签: powershell sql-server-2012 data-tier-applications dacpac

我目前正在重写我的团队的数据库部署Powershell脚本,以使用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命名空间中,“而不是使用以前版本中的DacStoreDacExtractionUnit类,大多数内容都被重构为全新的DacServices控制器类。(src)“

我还没有在DacStore课程中找到等效的DacServices,所以截至目前我还不知道如何检索当前的DAC版本。 我已尝试搜索MSDN文档但其所有Powershell部分仍引用了旧的DACFx2.0 API。 (例如:here)。

如果有人能帮助我,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

刚收到MSFT的回复:

  

Dac 3.0 API没有您发现的此功能。使用T-SQL直接从dbo.sysdac_instances选择此数据。

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