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

jos*_*hls 5 sql-server powershell sql-server-2008

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

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

这是我正在尝试运行的代码(这是从联机丛书示例中复制/粘贴,只添加了连接参数).

$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"
Run Code Online (Sandbox Code Playgroud)

如果我更换$(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"
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*ein 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'"
Run Code Online (Sandbox Code Playgroud)

使用

$MyArray = "MyVar1='String1'", "MyVar2='String2'"
Run Code Online (Sandbox Code Playgroud)


jos*_*hls 4

好的。我在 SQL Server 论坛上发布了同样的问题,显然,这是 SQL Server 2008 的 PowerShell cmdlet 中的一个错误...请关注此处的线程