代码之家  ›  专栏  ›  技术社区  ›  joshuapoehls

调用Sqlcmd cmdlet在使用-Variable参数时引发异常

  •  5
  • joshuapoehls  · 技术社区  · 15 年前

    $(MyVar) ,我收到以下例外情况:

    下面是我试图运行的代码(从中复制/粘贴) 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 回复  |  直到 15 年前
        1
  •  5
  •   Scott Weinstein    14 年前

    事实上,这是SQL Server中的一个bug-在这里跟踪并修复 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'"
    
        2
  •  4
  •   joshuapoehls    15 年前
        3
  •  -1
  •   Marco Shaw    15 年前

    单独尝试一下:

    现在: PS>$MyArray 和 PS>MyVar1

    PS>$MyArray |获取成员

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

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