我正在尝试使用Invoke-SqlCmd
启动脚本作为包含SQLCMD变量的输入文件执行SQL查询,如$(varPROJECTNAME)。
例如:
CREATE DATABASE [$(varPROJECTNAME)$(varDBNAME)]
在这种情况下,我希望能够将空字符串设置为varPROJECTNAME
值。
此请求将使用经典的SQLCMD工具成功运行,但是使用Invoke-SqlCmd,我收到错误,脚本变量varPROJECTNAME未定义。
Invoke-Sqlcmd -Username $LoginSQL -Password $PasswordSQL -ServerInstance $InstanceSQL -Verbose -InputFile "$rootPackage\DB\UpdateDB\00-initSql\00-SubsTechCreateDatabase.sql" -Variable "varPROJECTNAME=$projectName","varDBNAME=$DatabaseName"
如果是上述情况,如果$projectName=""
,则会出现错误
是否可以设置调用Invoke-SqlCmd的默认值,或者从sql脚本的角度来看,在未定义的变量中为变量赋值?
非常感谢您的帮助
答案 0 :(得分:0)
在您的情况下,Invoke-SQLCommand
工具非常有助于运行一些错误检查,确保您在此处定义的所有变量都传递给SQL以设置您的数据库。
我建议进行更改,让我们为您的脚本添加一些逻辑,看看您是否指定了$ProjectName
值,如果是,则传递该值。如果没有,请改为执行稍微不同的命令。
If($projectName -ne $null){
$variables = "varPROJECTNAME=$projectName","varDBNAME=$DatabaseName"
}
else{
$variables = "varDBNAME=$DatabaseName"
}
Invoke-Sqlcmd -Username $LoginSQL -Password $PasswordSQL -ServerInstance $InstanceSQL `
-Verbose -InputFile "$rootPackage\DB\UpdateDB\00-initSql\00-SubsTechCreateDatabase.sql" `
-Variable $variables
你可以尝试这个例子吗?
在您当前的代码中,替换此
-Variable "varPROJECTNAME=$projectName"
带
-Variable "varPROJECTNAME=`"$($projectName)`""