我正在尝试使用Invoke-SqlCmd启动脚本执行SQL查询,作为包含SQLCMD变量的输入文件,例如$(varPROJECTNAME)。
例如:CREATE DATABASE [$(varPROJECTNAME)$(varDBNAME)]在这种情况下,我希望能够将空字符串设置为varPROJECTNAME值。
这个请求将使用经典的SQLCMD工具成功运行,但是使用Invoke-SqlCmd时,I get error,脚本变量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脚本的角度来看,在变量未定义时为其分配一个默认值?
非常感谢您的帮助
发布于 2017-06-28 22:55:10
在您的例子中,SQL工具非常有用地运行了一些错误检查,确保您在这里定义的所有变量都被传递给Invoke-SQLCommand来设置您的数据库。
我建议进行一个更改,让我们在脚本中添加一些逻辑,以查看您是否指定了$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)`""https://stackoverflow.com/questions/44803611
复制相似问题