2016-08-05 2 views
3

아래 기능을 통해 dacpac을 배포합니다. 나는 dacpac에 변수를 전달하는 방법을 살펴 보려고했다. 이것이 가능한가?powershell을 사용하여 변수 하위 구분으로 dacpac 배포

Function DeployDB { 

param( 
    [string]$SqlServerName = $(throw "Missing required parameter SqlServerName"), 
    [string]$SqlServerUserName = $(throw "Missing required parameter SqlServerUserName"), 
    [string]$SqlServerPassword = $(throw "Missing required parameter SqlServerPassword"), 
    [string]$dacpac = $(throw "Missing required parameter dacpac"), 
    [string]$dbname = $(throw "Missing required parameter dbname") 
    ) 

Write-Host "Deploying the DB with the following settings" 
Write-Host "Server Name: $SqlServerName" 
Write-Host "DACPAC: $dacpac" 
Write-Host "Name: $dbname" 

# load in DAC DLL, This requires config file to support .NET 4.0. 
# change file location for a 32-bit OS 
#make sure you 
add-type -path "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll" 

# Create a DacServices object, which needs a connection string 
$dacsvcs = new-object Microsoft.SqlServer.Dac.DacServices "server=$SqlServerName;User ID=$SqlServerUserName;Password=$SqlServerPassword;" 

# register event. For info on this cmdlet, see http://technet.microsoft.com/en-us/library/hh849929.aspx 
register-objectevent -in $dacsvcs -eventname Message -source "msg" -action { out-host -in $Event.SourceArgs[1].Message.Message } | Out-Null 

# Load dacpac from file & deploy database 
$dp = [Microsoft.SqlServer.Dac.DacPackage]::Load($dacpac) 
$dacsvcs.Deploy($dp, $dbname, $true) 

# clean up event 
unregister-event -source "msg" 

} 
+0

dacpac의 통과 변수가 무엇을 의미하는지 자세히 설명해 주시겠습니까? 그런데 위 경로는 DACFx의 아주 오래된 버전을 사용합니다. 최신 버전 (https://www.microsoft.com/en-us/download/details.aspx?id=53013)은 SQL Server \ 130 \ DAC \ bin 폴더에 설치됩니다. –

+0

다음 SqlCmd 변수에 누락 값 : DeploymentName. (Microsoft.Data.Tools.Schema.Sql) 전달해야하는 단일 변수가 있습니다. – MrBeanzy

+0

SQLPackage를 설치할 필요가 없으므로 SQLPackage를 포함하는 NuGet 패키지를 출시했습니다. https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild –

답변

1

다음과 같이 옵션을 배포하고 Deploy() 함수에 네 번째 매개 변수로 전달할 만드는 시도 할 수 있습니다.

$deployOptions = New-Object Microsoft.SqlServer.Dac.DacDeployOptions 
$deployOptions.SqlCommandVariableValues.Add("SqlCmdParamName", "ParamValue"); 
+1

$ deployOptions.SqlCmdVariableValues ​​대신 $ deployOptions.SqlCommandVariableValues를 사용해보십시오. –