【问题标题】:How to return multiple recordsets from stored procedure using PowerShell如何使用 PowerShell 从存储过程返回多个记录集
【发布时间】:2021-04-21 17:28:17
【问题描述】:

我需要使用 PowerShell 运行一个返回 2 个结果集的存储过程。我使用 dbatools 来做到这一点,但我可以使用 .NET 来实现。我只是不知道怎么做。

对于这个例子,我使用exec sp_spaceused,它将返回实际数据库中使用的空间。这是 SSMS 中的结果:

正如您在此处看到的,有 2 个结果集。现在,当我在 PowerShell 中运行相同的命令时,我不知道如何获取下一个结果集。

这是我想出的代码:

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

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

【问题讨论】:

  • MultipleActiveResultSets 不是正确的,它用于同时执行多个查询,而且通常是个坏主意。查看文档,也许-As 'DataSet' 然后您可以从中获取单个表格?我假设这是一个标准的 ADO.Net DataSet

标签: sql sql-server powershell dbatools


【解决方案1】:

哇,我刚刚通过测试所有不同的-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 来避免加入对象,但您可以使用Out-GridView。我也意识到我不需要使用-MultipleActiveResultSets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多