You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:17:08