1

我正在尝试使用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 脚本的角度来看,在未定义变量时为其分配默认值?

非常感谢您的帮助

4

1 回答 1

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)`""
于 2017-06-28T14:55:10.440 回答