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

时间:2009-10-02 16:53:35

标签: sql-server sql-server-2008 powershell

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

  

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

这是我正在尝试运行的代码(仅从the Books Online example复制/粘贴,只添加了连接参数)。

$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"

如果我使用$(MyVar1)$(MyVar2)替换-Query中的'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 个答案:

答案 0 :(得分:5)

确实这是SQL Server中的一个错误 - 在此处进行跟踪和修复 https://connect.microsoft.com/sqlserver/feedback/details/358291/invoke-sqlcmd-powershell-cmdlet-fails-when-array-passed-via-variable

然而,有一个已发布的解决方法。删除作业周围的空格。而不是

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

使用

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

答案 1 :(得分:4)

确定。我在SQL Server论坛上发布了同样的问题,显然,这是SQL Server 2008的PowerShell cmdlet中的一个错误...... follow the thread here

答案 2 :(得分:-1)

单独尝试: PS> $ MyArray =“MyVar1 ='String1'”,“MyVar2 ='String2'”

现在: PS> $ MYARRAY 和 PS> MyVar1

现在: PS> $ MYARRAY |得到-构件

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

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