使用-Variable参数时,Invoke-Sqlcmd cmdlet抛出异常

5
当我尝试使用来自SQL Server 2008的Invoke-Sqlcmd cmdlet执行包含脚本变量(例如$(MyVar))的查询时,我会收到以下异常信息:

Invoke-Sqlcmd:对象引用未设置为对象实例。

这是我正在尝试运行的代码(这是从Books Online示例中复制/粘贴的,只添加了连接参数)。
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray -ServerInstance "localhost" -Database "master" -UserName "who" -Password "me"

如果我在-Query中将$(MyVar1)$(MyVar2)替换为'x''y',那么它就可以完美地运行。

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT 'x' AS Var1, 'y' AS Var2;" -Variable $MyArray -ServerInstance "localhost" -Database "master" -UserName "who" -Password "me"

有人能告诉我为什么这不起作用吗?

3个回答

5

4

好的。我在SQL Server论坛上发布了同样的问题,显然这是SQL Server 2008 PowerShell cmdlets中的一个错误... 在此处跟进该主题


-1

尝试单独执行以下代码:

PS>$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"

现在输入以下代码:

PS>$MyArray

PS>MyVar1

现在输入以下代码:

PS>$MyArray|get-member

PowerShell认为你已经将两个字符串对象分配给了$MyArray,仅此而已。这种方法并不会定义变量$MyVar1和$MyVar2到PowerShell中。

很抱歉,我现在无法启动我的SQL2008虚拟机来评论其他部分...


根据Books Online的示例,将这2个字符串分配给数组正是所需的,因为cmdlet期望一个变量分配的数组。 - joshuapoehls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接