Powershell - 使用多个select语句和结果表执行SQL查询的正确方法

时间:2017-06-19 14:47:14

标签: sql-server excel powershell resultset

我正在尝试使用少量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 个答案:

答案 0 :(得分: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;