我正在努力自动化SSDT项目的脚本,以便稍后可以使用传入的变量的替代值进行部署。
我的发布资料看起来像这样。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetConnectionString>Data Source=.;Integrated Security=True;Pooling=False</TargetConnectionString>
<TargetDatabaseName>BLANK</TargetDatabaseName>
<UpdateDatabase>False</UpdateDatabase>
<ScriptDatabaseOptions>True</ScriptDatabaseOptions>
<BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
<CreateNewDatabase>True</CreateNewDatabase>
<IgnoreObjectPlacementOnPartitionScheme>False</IgnoreObjectPlacementOnPartitionScheme>
<ProfileVersionNumber>1</ProfileVersionNumber>
<CommentOutSetVarDeclarations>True</CommentOutSetVarDeclarations>
</PropertyGroup>
</Project>
在我的测试脚本中,我从powershell
调用以下内容$Directory = 'C:\GitProjects\CI\DevPOC\Database\ETL POC\AdventureWorksDW\'
$Publish = 'AdventureWorksDW.publish.xml'
Set-Location $Directory
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Build
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish"
然后我得到了许多与变量值有关的错误,例如下面的例子。
Deploy error SQL72014: SQL Execution error: A fatal error occurred. The variable DatabaseName could not be found. [C:\GitProjects\CI\POC\Database\ETL POC\AdventureWorksDW\AdventureWorksDW.sqlproj]
但是,如果我将CommentOutSetVarDeclarations设置为false,则生成的脚本没有错误。通过SSDT执行相同任务时,不会产生任何错误。
有没有人经历过类似的行为?
答案 0 :(得分:2)
因此,经过微软支持的一些来回,我有一个解决这个问题的方法。似乎不会以这种方式拾取和使用发布配置文件中设置的参数UpdateDatabase。不是100%确定这是否被确认为错误,但通过使用以下命令,它可以正常工作。
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish" /p:UpdateDatabase=False