如何使用 PowerShell 从存储过程返回多个记录集

问题描述

我需要使用 PowerShell 运行一个返回 2 个结果集的存储过程。我使用 dbatools 这样做,但我可以使用 .NET 到达那里。我只是不知道如何。

在本例中,我使用 exec sp_spaceused 将返回实际数据库中使用的空间。这是 SSMS 中的结果:

result from sp_spaceused in SSMS

正如您在此处看到的,有 2 个结果集。现在,当我在 PowerShell 中运行相同的命令时,我无法弄清楚如何获取一个结果集。

这是我想出的代码

$conn = Connect-DbaInstance -sqlInstance . -MultipleActiveResultSets
$query = 'exec sp_spaceused'
Invoke-DbaQuery -sqlInstance $conn -Query $query

我什至不确定我是否以正确的方式使用了 MultipleActiveResultSets。我在任何地方都找不到任何好的例子。

解决方法

哇,我刚刚通过测试所有不同的 -As 选项找到了答案。代码如下:

$conn = Connect-DbaInstance -SqlInstance . -Database 'StackOverFlow'
$query = 'exec sp_spaceused'
$ds = Invoke-DbaQuery -SqlInstance $conn -Query $query -As DataSet
foreach ($table in $ds.Tables) {
    $table | Out-String
}

我使用 Out-String 来避免加入 objet,但您可以使用 Out-GridView。我也意识到我不需要使用 -MultipleActiveResultSets