首页 > 解决方案 > 根据输入对象列表过滤 DACPAC 文件

问题描述

目前我有一个使用 DACPAC 文件的 Azure Synapse DW 增量部署的 Azure DevOps 发布管道,它工作正常。现在,我希望在 DACPAC 文件上实现一个过滤器,以便在比较后仅包含特定对象,并且只有这些对象才会部署到目标数据库。因为我们通常在开发环境中创建了许多表/存储过程,并且这些表/存储过程无法部署到更高的环境中。我尝试使用 DacFX API 排除所有Delete,AddChanged使用以下代码片段的操作,然后仅包含需要部署的对象。但是排除对象需要很长时间。注意:这里我正在处理大约 3k 个对象。

$comparisonResult.Differences | %{
        if($_.UpdateAction -eq "Delete") {
            $comparisonResult.Exclude($_) | Out-Null
    }
}

$comparisonResult.Differences | %{
        if($_.UpdateAction -eq "Change") {
            $comparisonResult.Exclude($_) | Out-Null
    }
}

$comparisonResult.Differences | %{
        if($_.UpdateAction -eq "Add") {
            $comparisonResult.Exclude($_) | Out-Null
    }
}

#start including required objects
$objectList = @('schema1.table1'
,'schema1.table2'
,'schema2.view_sample1'
,'schema2.table4')

Write-Host "Including objects from the provided list... "
$comparisonResult.Differences | %{
        if($_.SourceObject.Count -gt 0)
        {
            $schemaName=$_.SourceObject.Name.parts[0]
            $objectName = $_.SourceObject.Name.parts[1]
            $finalObjectToInclude = $schemaName + "." + $objectName
            if( $objectList -contains $finalObjectToInclude)
            {
                Write-Output "Including Object $($finalObjectToInclude)"
                $comparisonResult.Include($_) | Out-Null
            }
        }
}

需要您的专家建议以使其正常工作,或者也欢迎任何其他建议。

提前致谢。

标签: sql-serverdacpacazure-synapse

解决方案


推荐阅读