2009-10-02 43 views
5

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

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" 

如果我在-Query'x''y'更换$(MyVar1)$(MyVar2)然后它完美地运行。

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

谁能告诉我为什么这不起作用?

回答

4

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

-1

试试这个孤独: PS> $ MYARRAY = “MyVar1 = '字符串1'”, “MyVar2 = 'String2的'”

现在: PS> $ MYARRAY 和 PS> MyVar1

现在: PS> $ MyArray | get-member

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

对不起,我不能开除我的SQL2008 VM现在对其他部分评论...

+0

按照联机丛书例如,分配2个字符串数组正是需要做的,因为该cmdlet期待变量赋值的数组。 – joshuapoehls 2009-10-05 20:01:28