#sql #sql-server #powershell #dbatools
#sql #sql-сервер #powershell #dbatools
Вопрос:
Мне нужно запустить хранимую процедуру, которая возвращает 2 результирующих набора с помощью PowerShell. Для этого я использую dbatools, но я мог бы использовать.СЕТЬ, чтобы добраться туда. Я просто не знаю, как это сделать.
В этом примере я использую exec 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.NetDataSet
Ответ №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
.