Как мне объединить 2 результата запроса и экспортировать в один CSV-файл? - PullRequest
0 голосов
/ 28 февраля 2019

предположим, у меня есть два сервера БД.

У меня есть следующий скрипт

Function Query1($Query1) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=db1.com;Initial 
Catalog=Report Server;Integrated Security=SSPI" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.Connection = $SqlConnection 
$SqlCmd.CommandText = $Query1 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close() 
$DataSet.Tables[0]} 

Function Query2($Query2) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=db2.com;Initial 
Catalog=Report Server;Integrated Security=SSPI" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.Connection = $SqlConnection 
$SqlCmd.CommandText = $Query2 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close() 
$DataSet.Tables[0]}

$Result1 = Query1 "SELECT  [InstanceName]
      ,[ItemPath]
      ,ca.name as ObjectName
      ,(case
         when ca.type = 1 then 'Folder'
         when ca.type = 2 then 'Report'
         when ca.type = 3 then 'Resources'
         when ca.type = 4 then 'Linked Report'
         when ca.type = 5 then 'Data Source'
         when ca.type = 6 then 'Report Model'
         when ca.type = 7 then ' Report Part (SQL 2008 R2, unverified)'
         when ca.type = 8 then 'Shared Dataset (SQL 2008 R2)'
         when ca.type = 13 then 'PowerBI Report'
        End ) as ObjectType

      ,[UserName]
      ,[ExecutionId]
      ,[RequestType]
      ,[Format]
      ,[Parameters]
      ,[ItemAction]
      ,[TimeStart]
      ,[TimeEnd]
      ,[TimeDataRetrieval]
      ,[TimeProcessing]
      ,[TimeRendering]
      ,[Source]
      ,[Status]
      ,[ByteCount]
      ,[RowCount]
      ,[AdditionalInfo]
  FROM [dbo].[$reportServerView] e
  join Catalog ca
  on ca.Path = e.ItemPath where ItemAction = 'ConceptualSchema'or ItemAction 
  = 'QueryData'";
$Result1 | Export-Csv -Path $file_Path\file.csv -NoTypeInformation

$Result2 = Query2 "SELECT  [InstanceName]
      ,[ItemPath]
      ,ca.name as ObjectName
      ,(case
         when ca.type = 1 then 'Folder'
         when ca.type = 2 then 'Report'
         when ca.type = 3 then 'Resources'
         when ca.type = 4 then 'Linked Report'
         when ca.type = 5 then 'Data Source'
         when ca.type = 6 then 'Report Model'
         when ca.type = 7 then ' Report Part (SQL 2008 R2, unverified)'
         when ca.type = 8 then 'Shared Dataset (SQL 2008 R2)'
         when ca.type = 13 then 'PowerBI Report'
        End ) as ObjectType

      ,[UserName]
      ,[ExecutionId]
      ,[RequestType]
      ,[Format]
      ,[Parameters]
      ,[ItemAction]
      ,[TimeStart]
      ,[TimeEnd]
      ,[TimeDataRetrieval]
      ,[TimeProcessing]
      ,[TimeRendering]
      ,[Source]
      ,[Status]
      ,[ByteCount]
      ,[RowCount]
      ,[AdditionalInfo]
  FROM [dbo].[$reportServerView] e
  join Catalog ca
  on ca.Path = e.ItemPath where ItemAction = 'ConceptualSchema'or ItemAction 
  = 'QueryData'";
$Result2 | Export-Csv -Path $file_Path\file.csv -NoTypeInformation

Второй запрос перезаписывает результаты первого запроса в файле csv.Мне нужно, чтобы оба запроса добавлялись в один и тот же файл, однако я не хочу использовать команду добавления, потому что каждый раз, когда я запускаю скрипт, я хочу, чтобы файл перезаписывался новыми данными, так как он выполняется каждый день

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Используете ли вы Powershell v3 или новее?Если это так, вы сможете выполнить свой первый запрос как есть, а для второго запроса используйте «-Append» для добавления в файл.

Однако это даст вам вторую строку заголовка, которая появится в середине.файла.Чтобы избежать этого, вам, вероятно, нужно включить

| Select-Object -Skip 1 |

0 голосов
/ 28 февраля 2019

Теперь, когда я думаю об этом ... я могу просто использовать -Append ко второму запросу ... потому что первый запрос всегда будет воссоздавать файл, и только второй запрос должен добавляться к существующему!

$Result1 | Export-Csv -Path $file_Path\file.csv -NoTypeInformation
$Result2 | Export-Csv -Path $file_Path\file.csv -NoTypeInformation -append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...