【问题标题】:Invoke-SQLCMD unable to run multiple SQL Statements in PowerShellInvoke-SQLCMD 无法在 PowerShell 中运行多个 SQL 语句
【发布时间】:2020-07-07 02:37:37
【问题描述】:

我无法从 Invoke-sqlcmd 运行 2 条 SELECT 语句。

$sql ="
select SERVERPROPERTY('ProductVersion') Version
select SERVERPROPERTY('ProductLevel') ServicePack, SERVERPROPERTY('edition') Edition"
    
$server = 'SomeServerName'    
Invoke-Sqlcmd -ServerInstance $server -Query $sql 

只有第一个 TSQL 语句返回结果。

注意:我可以重写 TSQL 来做一条语句。那不是 观点。原始脚本有多个 TSQL 命令。还有,我可以 对于每个语句,单独的 invoke-sqlcmd 调用。不过,我是 试图了解这是否是 invoke-sqlcmd 的限制。

这是预期的行为吗?

非常感谢。

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    你已经得到了一个有效的答案,但这更多的是对正在发生的事情的解释......

    基本上,您遇到的是显示/格式问题,而不是 Invoke-SqlCommand 的问题。

    在您的示例中,您的屏幕输出可能如下所示:

    PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql
    
    Version
    -------
    15.0.2070.41
    
    
    
    PS> _
    

    注意表格后面的3个空行——第一个空行实际上是第二个sql命令的结果!

    当 PowerShell 格式化项目表时,它使用第一项来决定要显示哪些列 - 第一个命令的结果仅包含一个“版本”列,因此这就是表所包含的全部内容。第二个命令的结果没有“版本”列,因此 PowerShell 在该列中显示一个空值,但它也不会为您将“ServicePack”或“版本”列添加到表中。

    您可以通过指定列名来覆盖它,如下所示:

    PS> Invoke-Sqlcmd -ServerInstance $server -Query $sql | format-table Version, ServicePack, Edition
    
    Version      ServicePack Edition
    -------      ----------- -------
    15.0.2070.41
                 RTM         Developer Edition (64-bit)
    
    
    PS> _
    

    请注意,现在表格后面只有 2 个空白行,因为第二个结果已被隐藏。

    如果您在循环中分别输出这两个结果,PowerShell 将显示两个单独的表格,并决定在每个表格中分别显示哪些列,因此您可以根据@Dan Guzman 的回答得到:

    Version    
    -------    
    15.0.4023.6
    
    
    
    ServicePack Edition                   
    ----------- -------                   
    RTM         Developer Edition (64-bit)
    

    【讨论】:

      【解决方案2】:

      一种方法是遍历Invoke-Sqlcmd 的结果以显示多个结果集:

      $results = Invoke-Sqlcmd -ServerInstance $server -Query $sql
      for ($i = 0; $i -lt $results.Count; ++$i) {
          $results[$i] | Out-Host
      }
      

      输出:

      Version    
      -------    
      15.0.4023.6
      
      
      
      ServicePack Edition                   
      ----------- -------                   
      RTM         Developer Edition (64-bit)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 2018-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多