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



我目前正在重写团队的数据库部署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脚本

$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)"

我还没能在DacServices类中找到等效的DacStore,所以到目前为止,我不知道如何检索当前的DAC版本我尝试过搜索MSDN文档,但它们的Powershell部分仍然引用了旧的DACFx2.0 API。(示例:此处)。

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

刚刚收到MSFT:的回复

如您所发现的,Dac 3.0 API不具备此功能。使用T-SQL直接从dbo.sysdac_instances中选择此数据。

事实上,这似乎是唯一的方法:http://msdn.microsoft.com/en-us/library/ee240830.aspx因此,我现在将对该视图提出质疑,尽管我真的很想看到它在某个时候被引入DACFx API。请注意,视图dbo.sysdac_instances位于master数据库中,因为SQL Azure中不存在msdb。

相关内容

  • 没有找到相关文章

最新更新