Invoke-Sqlcmd变量值含等号时格式无效,如何解决?
问题描述
使用Invoke-Sqlcmd的-Variable参数时,若变量值包含等号会触发格式错误。
正常无等号的示例可正常运行:
$StringArray = "MYVAR1='String1'", "MYVAR2='String2'" Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray
输出:
Var1 Var2 ---- ---- String1 String2
但当变量值包含等号时执行:
$StringArray = "MYVAR1='String1'", "MYVAR2='String2=String3'" Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray
会报错:
Invoke-Sqlcmd : The format used to define the new variable for Invoke-Sqlcmd cmdlet is invalid. Please use the 'var=value' format for defining a new variable.
解决方案
1. 优先使用哈希表传递变量
Invoke-Sqlcmd的-Variable参数支持直接接收哈希表,完全避免值中等号的解析冲突:
$SqlVars = @{ MYVAR1 = 'String1' MYVAR2 = 'String2=String3' } Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $SqlVars
2. 转义值中的等号(兼容性有限)
若必须使用字符串数组格式,可通过反斜杠转义值内的等号,但该方式在不同版本的SqlServer模块中可能存在兼容性问题:
$StringArray = "MYVAR1='String1'", "MYVAR2='String2\=String3'" Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray
3. 直接在SQL脚本中定义变量
将查询逻辑写入SQL文件,在脚本内直接声明变量,绕过-Variable参数的解析限制:
创建query.sql文件:
DECLARE @MYVAR1 NVARCHAR(50) = 'String1'; DECLARE @MYVAR2 NVARCHAR(50) = 'String2=String3'; SELECT @MYVAR1 AS Var1, @MYVAR2 AS Var2;
执行命令:
Invoke-Sqlcmd -InputFile "query.sql"
内容的提问来源于stack exchange,提问作者Tan
相关产品推荐
相关产品推荐

