PowerShell 使用 **DacServices** 和 SQLCMD 变量来部署 DACPAC
PowerShell Using **DacServices** With SQLCMD Variables To Deploy A DACPAC
在 PowerShell 中,我使用 Microsoft.SqlServer.Dac.DacServices 和 Microsoft.SqlServer.Dac.DacDeployOptions 到 deploy/update 数据库 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 中,我找不到 DacServices 使用 SQLCMD 变量作为选项的示例——SQLCMD 变量作为我项目的 DACPAC 的必需参数。
您应该在 $deployOptions.SqlCommandVariableValues 属性 中设置选项。这是一个 updateabase 字典 - 你不能分配一个新字典,但你可以更新其中的 key/value 对。例如将变量 "MyDatabaseRef" 设置为 "Database123" 使用
$deployOptions.SqlCommandVariableValues.Add("MyDatabaseRef", "Database123");
API 引用是 here。
我还有另一个与此相关的代码片段要分享,这是一种从 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"}
在 PowerShell 中,我使用 Microsoft.SqlServer.Dac.DacServices 和 Microsoft.SqlServer.Dac.DacDeployOptions 到 deploy/update 数据库 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 中,我找不到 DacServices 使用 SQLCMD 变量作为选项的示例——SQLCMD 变量作为我项目的 DACPAC 的必需参数。
您应该在 $deployOptions.SqlCommandVariableValues 属性 中设置选项。这是一个 updateabase 字典 - 你不能分配一个新字典,但你可以更新其中的 key/value 对。例如将变量 "MyDatabaseRef" 设置为 "Database123" 使用
$deployOptions.SqlCommandVariableValues.Add("MyDatabaseRef", "Database123");
API 引用是 here。
我还有另一个与此相关的代码片段要分享,这是一种从 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"}