我目前正在重写我的团队的数据库部署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
命名空间中,“而不是使用以前版本中的DacStore
和DacExtractionUnit
类,大多数内容都被重构为全新的DacServices
控制器类。(src)“
我还没有在DacStore
课程中找到等效的DacServices
,所以截至目前我还不知道如何检索当前的DAC版本。 我已尝试搜索MSDN文档但其所有Powershell部分仍引用了旧的DACFx2.0 API。 (例如:here)。
如果有人能帮助我,我将不胜感激。谢谢!
答案 0 :(得分:2)
刚收到MSFT的回复:
事实上它似乎是唯一的方式:http://msdn.microsoft.com/en-us/library/ee240830.aspx 所以我现在要查询该视图,虽然我真的很想看到它在某些时候被带入DACFx API。请注意,视图 dbo.sysdac_instances 位于 masters 数据库中,因为SQL Azure中不存在msdb。Dac 3.0 API没有您发现的此功能。使用T-SQL直接从dbo.sysdac_instances选择此数据。