当我尝试使用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"
有谁能告诉我为什么这不起作用?
答案 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虚拟机来评论其他部分......