PowerShell使用** DacServices **和SQLCMD变量来部署DACPAC

时间:2015-02-18 16:42:15

标签: powershell sqlcmd dacpac sql-server-data-tools

在PowerShell中,我使用 Microsoft.SqlServer.Dac.DacServices 和Microsoft.SqlServer.Dac.DacDeployOptions来部署/更新数据库DACPAC。我遇到的问题是找到设置程序包所需的SQLCMD变量的位置。

缩写样本

# Create a DacServices object, which needs a connection string 
$dacsvcs = New-Object Microsoft.SqlServer.Dac.DacServices "server=$sqlserver"

# Load dacpac from file
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac) 

# Deploy options
$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions
$deployOptions.IncludeCompositeObjects = $true

我知道我可以使用SqlPackage.exe输入这些内容,也许这就是我应该做的。但是在文档或Web浏览器中没有任何地方可以找到DacServices作为选项使用SQLCMD变量的示例 - SQLCMD变量作为我项目的DACPAC的必需参数。

2 个答案:

答案 0 :(得分:10)

您应该在$ deployOptions.SqlCommandVariableValues属性中设置选项。这是一个updateabase字典 - 您无法分配新字典,但可以更新其中的键/值对。例如,要将变量“MyDatabaseRef”设置为“Database123”,请使用

$deployOptions.SqlCommandVariableValues.Add("MyDatabaseRef", "Database123");

API参考是here

答案 1 :(得分:0)

与此有关的还有另一个代码段,一种从Powershell脚本参数处理多个变量的方法;

param(
[hashtable] $SqlCmdVar
)

$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions

# Process the Sql Command Variables
#
if ($SqlCmdVar -ne $null)
{
    foreach($key in $SqlCmdVar.keys)
    {
        Write-Verbose -Message "Adding Sql Command Variable ""$key""..."

        $deployOptions.SqlCommandVariableValues.Add($key,$SqlCmdVar[$key])
    }
}

您将这样调用脚本;

myscript.ps1 -SqlCmdVar @{ variable1 = "my first value"; variable2 = "my second value"; variableetc = "more values"}