7

在 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 grok 中,我找不到使用 SQLCMD 变量作为选项的 DacServices 使用示例——SQLCMD 变量作为我项目 DACPAC 的必需参数。

4

2 回答 2

10

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

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

API 参考在这里

于 2015-02-20T08:06:31.947 回答
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"}
于 2018-06-26T13:11:59.090 回答