【发布时间】:2017-12-01 21:13:44
【问题描述】:
我正在尝试使用 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 脚本的角度,在变量未定义时为其分配默认值?
非常感谢您的帮助
【问题讨论】:
-
我们可能还需要更多的描述和代码,这个问题很不清楚
-
sqlcmd.exe不喜欢你这样做:sqlcmd -Q "SELECT '$(var)'"->"'var' scripting variable not defined."无论如何它都会继续,保持变量没有任何替换,字面意思是$(var)(除非你传递了-b,然后批处理被中止,没有任何反应,与Invoke-SqlCmd相同)。依赖这个是不明智的。如果您必须这样做,我建议您识别变量并显式传递空值。 -
其实就是这个问题,用SQLCMD传递空变量就行了;在您的情况下,如果 var=='' 它是一个空字符串,将在执行的查询中使用。使用 Invoke-SqlCmd,查询根本不会运行,尽管我将变量显式设置为 ''
-
invoke-sqlcmd 'SELECT $(var)' -Variable "var=''"-> 没有错误。您必须提供失败的代码。 -
invoke-sqlcmd 'SELECT $(var)' -Variable "var=" 在我的情况下会失败;抱歉,我不清楚