T-SQL部署后脚本如何引用变量

问题描述:

我deployng DACPAC与以下部署后SCRIPT1:T-SQL部署后脚本如何引用变量

ALTER DATABASE [$(DatabaseName)] 
MODIFY FILE (NAME = [$(DatabaseName)], 
      SIZE = 100MB, MAXSIZE = UNLIMITED, FILEGROWTH = 20%) 

然而,当我尝试引用此部署后SCRIPT2,部署失败:

ALTER DATABASE [$(DatabaseName)] 
MODIFY FILE (NAME = [$(DatabaseName)], 
      SIZE = $(size), MAXSIZE = UNLIMITED, FILEGROWTH = 20%) 

所以,我的问题是什么是通过大小正确的语法?

我使用这个命令来启动脚本(第一SCRIPT1作品,SCRIPT2没有)

$resourceGroup = "SQL1" 
$vmName = "SQL1" 
$storageName = "sql1artifactsstorage111" 
$ConfigurationPath = "C:\DSC\Ext\deployDB.ps1" 
$ConfigurationName = "deployDB" 
$configurationArchive = "deployDB.ps1.zip" 
#Publish the configuration script into user storage 
Publish-AzureRmVMDscConfiguration -ConfigurationPath $ConfigurationPath -ResourceGroupName $resourceGroup -StorageAccountName $storageName -force 
#Set the VM to run the DSC configuration 
$configurationArguments = 
@{ 
    Credential = Get-Credential; 
    DatabaseName = 'Database1' 
    size = '100MB' 
} 
Set-AzureRmVmDscExtension -Version 2.22 -Name dscExtension -ResourceGroupName $resourceGroup -VMName $vmName -ArchiveStorageAccountName $storageName -ArchiveBlobName $configurationArchive -AutoUpdate:$true -ConfigurationName $ConfigurationName -ConfigurationArgument $configurationArguments 

这是错误DSC显示:

Dac Deploy Failed: 'Exception calling "Deploy" 
with "3" argument(s): "An error occurred during deployment plan generation. 
Deployment cannot continue."' 
+0

你有多个标记为“Post-Deploy”的文件吗?您应该只有一个后期部署文件,并使用:r标签包含要在该后期部署脚本中运行的其他文件。 –

+0

我只有1个部署后脚本 – WinBoss

动态SQL是最后的避难所歹徒:

EXEC ('ALTER DATABASE [$(DatabaseName)] MODIFY FILE (NAME = [$(DatabaseName)],SIZE = $(size), MAXSIZE = UNLIMITED, FILEGROWTH = 20%)'); 
GO 

为我工作,虽然在本地部署,而不是通过Azure D SC。

这是一种通用技术,用于执行通常不支持TSQL变量替换的“DBA类型”活动。


请注意未来的读者:这个招数显然有效,也就是说OP已经标记为答案。但是,由于工作站和构建服务器之间的DacFX版本不同,因此只需要,这可能是,请参阅another SO post relating to the same error message