Как вернуть несколько наборов записей из хранимой процедуры с помощью PowerShell

#sql #sql-server #powershell #dbatools

#sql #sql-сервер #powershell #dbatools

Вопрос:

Мне нужно запустить хранимую процедуру, которая возвращает 2 результирующих набора с помощью PowerShell. Для этого я использую dbatools, но я мог бы использовать.СЕТЬ, чтобы добраться туда. Я просто не знаю, как это сделать.

В этом примере я использую exec sp_spaceused это, чтобы вернуть пространство, используемое в реальной базе данных. Вот результат в SSMS:

результат sp_spaceused в SSMS

Как вы можете видеть здесь, существует 2 набора результатов. Теперь, когда я запускаю ту же команду в PowerShell, я не могу понять, как получить следующий результирующий набор.

Вот код, который я придумал:

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

Я даже не уверен, правильно ли я использовал MultipleActiveResultSets . Я нигде не могу найти ни одного хорошего примера.

Комментарии:

1. MultipleActiveResultSets это не то, что нужно, это используется для одновременного выполнения нескольких запросов и, как правило, в любом случае является плохой идеей. Глядя на документы, может -As 'DataSet' быть, тогда вы сможете извлечь из них отдельные таблицы? Я предполагаю, что это стандарт ADO.Net DataSet

Ответ №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 , чтобы избежать присоединения к objet, но вы могли бы использовать Out-GridView . Я также понимаю, что мне не нужно использовать -MultipleActiveResultSets .