You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell将两个SQL查询结果合并到同一Excel文件?

问题修正方案

原代码核心问题

  • SQL调用语法错误:Invoke-Sqlcmd的-Query参数未正确绑定查询变量,导致SQL查询未执行,结果变量为空。
  • 结果关联逻辑错误:直接将多行查询结果的数组赋值给自定义对象属性,输出到Excel时会显示数组内容而非单条数据。
  • 重复写入冗余:循环内每次执行Export-Excel -Append会重复写入所有历史结果,造成数据冗余且效率低下。

修正后的代码

$server = "ServerName"
$database = "DBName"
$combinedResults = @() 
$excelFilePath = "C:\Desktop\Scripts\CSVOutput\Output_EngBOMUsed_1.xlsx"
$queryBOM = "Select Distinct UsedOnRn From [NIMS_Eng].[dbo].[vEngBOMHierarchy2_Aras] EBOMH"
$invokeSqlBOM = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $queryBOM 

foreach($row in $invokeSqlBOM){
    $usedOnRn = $row.UsedOnRn
    # 获取源部件单行信息
    $usedOnRnQuery = @"
SELECT DISTINCT
    PartRn,
    PartNo AS SOURCE_PART_NUMBER,
    Revision AS SOURCE_PART_REVISION 
FROM [NIMS_Eng].[dbo].[vEngParts_Aras]
WHERE PartRn = '$usedOnRn'
"@
    $invokeSqlusedOnRn = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $usedOnRnQuery

    # 获取关联部件多行信息
    $partRnQuery = @"
SELECT DISTINCT 
    EBOMH.PartRn AS Child_PartRn, 
    EPA.Revision AS RELATED_PART_REVISION,
    EPA.PART_NUMBER AS RELATED_PART_NUMBER,
    EBOMH.QtyPerAssy AS QUANTITY,
    EBOMH.UsedonRn    
FROM [NIMS_Eng].[dbo].[vEngBOMHierarchy2_Aras] EBOMH
INNER JOIN [NIMS_Eng].[dbo].[vEngParts_TwoPartONly_Aras] EPA ON EPA.PartRn=EBOMH.PartRn
WHERE EBOMH.UsedOnRn = '$usedOnRn'
"@
    $invokePartRn = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $partRnQuery

    # 逐行关联源部件与关联部件信息
    foreach($partRow in $invokePartRn){
        $combinedObject = [PSCustomObject]@{
            UsedOnRn               = $usedOnRn
            Source_Part_Number     = $invokeSqlusedOnRn.SOURCE_PART_NUMBER
            Source_Part_Revision   = $invokeSqlusedOnRn.SOURCE_PART_REVISION
            Related_Part_Number    = $partRow.RELATED_PART_NUMBER
            Related_Part_Revision  = $partRow.RELATED_PART_REVISION
            Quantity               = $partRow.QUANTITY
        }
        $combinedResults += $combinedObject
    }
}

# 一次性写入所有结果到Excel
$combinedResults | Export-Excel -Path $excelFilePath -AutoSize -FreezeTopRow

修改关键点说明

  1. 修复SQL调用:确保Invoke-Sqlcmd的-Query参数直接绑定查询变量,保证查询正常执行。
  2. 优化结果关联:循环遍历多行查询的每条结果,与单行源部件信息组合成独立对象,确保每条数据格式符合预期。
  3. 批量写入Excel:将Export-Excel移至循环外,一次性写入所有结果,避免重复冗余,同时添加-AutoSize和-FreezeTopRow优化输出格式。

内容的提问来源于stack exchange,提问作者Brute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:15:26