2017-06-19 16 views
1

いくつかのselectステートメントでSQLクエリを実行しようとしています。結果として複数のテーブルが返されます。問題は、テーブルを個別に読み込んで使用する方法が見つからないということです。Powershell - 複数のSELECTステートメントと結果テーブルでSQLクエリを実行する適切な方法

期待される結果:

enter image description here

実際の結果:(それは行ごとに印刷されている)

enter image description here

目的:私は、スクリプトを作りました複数のシートとそれぞれの空のExcelファイルを作成する彼のシートは、クエリの各結果セットを格納するために使用されます。 残っているのは、必要なテキストをシートに入れることだけです。ここではその部分だけのために私のコードは次のとおりです。

$ConnectionString = "Data Source=...;Initial Catalog=...;User Id=...;Password=..." 
$DBServerName = $ConnectionString.split('=')[1].split(';')[0] 
$DBName = $ConnectionString.split('=')[2].split(';')[0] 
$DBUser = $ConnectionString.split('=')[3].split(';')[0] 
$DBPassword = $ConnectionString.split('=')[4].split(';')[0] 

$CurrentFilePath = "C:\SQLqueryWithManyResultsets.sql" 

$query = Get-Content -literalPath $CurrentFilePath | Out-String #getting the query string from file 

$resultTables = Invoke-Sqlcmd -Query $query -ServerInstance $DBServerName -Database $DBName -DisableVariables -Password $DBPassword -Username $DBUser -ErrorAction Stop 

foreach ($result in $resultTables) { 
    $result | Format-Table #where the magic happens 
} 

私は多くの研究を行ったが、私は私が必要な方法を格納したテーブルを読むための適切な方法を見つけることができません。

答えて

1

これを試してみてください:

Clear-Host; 
$objConnection = New-Object System.Data.SqlClient.SqlConnection; 
$objConnection.ConnectionString = "..."; 


$ObjCmd = New-Object System.Data.SqlClient.SqlCommand; 
$ObjCmd.CommandText = "..."; 
$ObjCmd.Connection = $objConnection; 
$ObjCmd.CommandTimeout = 0; 

$objAdapter = New-Object System.Data.SqlClient.SqlDataAdapter; 
$objAdapter.SelectCommand = $ObjCmd; 
$objDataSet = New-Object System.Data.DataSet; 

$objAdapter.Fill($objDataSet) | Out-Null; 

for ($i=0; $i -lt $objDataSet.Tables.Count; $i++) { 
    Write-Host ($objDataSet.Tables[$i] | Format-Table | Out-String); 
} 


$query = $null; 

$objDataSet = $null; 

$objConnection.Close(); 
$objConnection = $null; 
関連する問題