invoke-sqlcmd空变量

时间:2017-06-28 13:16:07

标签: powershell invoke-sqlcmd

我正在尝试使用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脚本的角度来看,在未定义的变量中为变量赋值?

非常感谢您的帮助

1 个答案:

答案 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)`""