2015-04-27 6 views
0

Я ищу предложения по возврату нескольких наборов данных или открытию сеанса с Invoke-SqlCmd?Powershell Invoke-Sqlcmd - возвращает несколько наборов данных

У меня есть серия SQL-запросов, которые используют временные таблицы для генерации нескольких связанных представлений данных, которые я отправляю (через Excel) менеджеру. Когда мы работаем над тем, что требуется от наборов данных, я немного устаю от резки и вставки образцов в Excel.

Я думал использовать Powershell, чтобы просто отправить результаты в HTML-файлы в качестве вывода для менеджера, однако я столкнулся с несколькими проблемами

  1. Если я кладу окончательные экстракты в один SQL файл, Powershell присоединяет все данные в единый результирующий набор (вид union таблиц)
  2. Если я попытаюсь создать временные таблицы, а затем извлечь каждый запрос отдельно, каждый Invoke-Sqlcmd будет отдельным сеансом, то есть мои временные таблицы будут отброшены.

Я ищу предложения по возврату нескольких наборов данных или открытию сессии?

Invoke-Sqlcmd -InputFile .\GenerateTimecard.sql -Variable $params | Out-Null; 

@{ 
    'Summary' = 'select * from #WeeklyTimeSummary;' 
    'ByDay' = 'select * from #WeeklyTimeDaily order by postdate desc;' 
    'ByTask' = 'select * from #WeeklyTimeEvents order by HoursSpent desc;' 
    'Detail' = 'select * from #WeeklyTimeDetail order by postdate desc;' 
}.GetEnumerator() | ForEach-Object { 
Write-Output $_.Name; 
    $fname = $_.Name + '.html'; 
    Invoke-Sqlcmd -Query $_.Value | ConvertTo-Html | Out-File -Encoding ascii $fname; 
}; 

ответ

0

В разделе описания из Get-Help Invoke-Sqlcmd говорится, что он поддерживает команды GO, поэтому вы можете попробовать запустить все сразу. Лично я бы использовал параметр -InputFile и передал результаты в Out-File.

+0

Это поставит все данные в единый результирующий набор, который затем не может быть разделен на отдельные выходные файлы. (См. Пункт 1 в ОП) –

Смежные вопросы