我在不同的SQL实例上执行了两个查询。我必须将它们作为两个单独的查询执行。
我需要将这些结果合并为一个,以便在$ lookup中匹配时,我可以使用$ result中的所有行创建一个CSV文件。通过比较两者中名为ID的列来进行匹配。
CSV文件应包含$ result中的所有列,以及$ lookup中匹配行的所有列,ID除外。
除了两者中的ID之外,列名称是未知的。
要创建CSV,我计划使用Export-CSV。但我需要以某种方式结合这两个结果。
$result = @(Invoke-Sqlcmd –ServerInstance $ServerInstance –Database $Database -ErrorVariable sqlerr -OutputSqlErrors $true -Query $sql -QueryTimeout 0 -ErrorAction Stop | select *)
$lookup = @(Invoke-Sqlcmd –ServerInstance $ServerInstance –Database $Database -ErrorVariable sqlerr -OutputSqlErrors $true -Query $sql -QueryTimeout 0 -ErrorAction Stop | select *)
我试过这个例子:
($result | select *) | Join ($lookup | select *) -on ID -eq ID
编辑:搞定了,回答如下。
我建议这样做:
$result
和$lookup
的列$result
$result
的行得到匹配的$lookup
行未经测试的脚本:
## the following commands are incomplete (missing closing parenthesis)
# $result = @(Invoke-Sqlcmd –ServerInstance $ServerInstance –Database $Database -ErrorVariable sqlerr -OutputSqlErrors $true -Query $sql -QueryTimeout 0 -ErrorAction Stop | select *
# $lookup = @(Invoke-Sqlcmd –ServerInstance $ServerInstance –Database $Database -ErrorVariable sqlerr -OutputSqlErrors $true -Query $sql -QueryTimeout 0 -ErrorAction Stop | select *
$resultCols = $result.PsObject.Properties.Name
$AppendCols = $lookup.PsObject.Properties.Name | Where Name -notin $resultCols
$result = $result | Select-Object -Property *,$AppendCols
foreach($Row in $result){
$lookupID = $lookup | Where-Object ID -eq $Row.ID
if($lookupID){
foreach($Col in $AppendCols){
$Row.$Col = $lookupID.$Col
}
}
}
$result | Export-Csv -NoTypeInformation .\ExtendedResult.csv
我在获取数据时切换到使用“System.Data.SqlClient”。然后下面的代码工作。感谢TopPings指出我正确的方向。
$resultCols = ($result.Columns | ForEach-Object {$_.ColumnName})
$AppendCols = ($lookup.Columns | ForEach-Object {$_.ColumnName})
$AppendCols = $AppendCols | Where-Object {$_ -ne 'ID'}
$AllCols = $resultCols + $AppendCols
$result = $result | Select-Object -Property $AllCols
$output = @()
foreach($Row in $result)
{
$lookupIDRow = $lookup | Where-Object ID -eq $Row.ID
if($lookupIDRow)
{
foreach($Col in $AppendCols)
{
$Row.$Col = $lookupIDRow.$Col
}
$output+=$Row
}
}