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

从PowerShell执行SSIS包仅返回进程结果码,无法获取结果集

解决PowerShell调用SSIS包无法获取结果集的问题

我懂你现在的困扰——用Package.Execute()执行SSIS包后,只能拿到进程结果码,想要的业务结果集却没影。这其实是因为这个方法本身的设计就是返回执行实例的操作对象(主要包含执行状态、实例ID这类元数据),而不是直接返回包生成的业务结果。下面给你一步步的解决方案:

第一步:提取执行实例ID

首先,$actualVal其实是一个Operation对象,里面的Id属性就是这次包执行的唯一实例ID,我们需要用它来定位对应的结果集:

# 从执行结果中提取实例ID
$executionId = $actualVal.Id
Write-Host "当前SSIS包执行实例ID: $executionId"

第二步:通过SSISDB系统视图查询结果集

SSIS会把包执行的所有元数据和结果集都存在SSISDB数据库的系统视图里。我们可以写SQL查询,关联这些视图来提取业务结果集。这里给你一个通用的查询脚本,能拿到所有返回的结果集数据:

# 构建查询语句,提取指定执行实例的结果集
$sqlQuery = @"
SELECT 
    rs.result_set_id AS 结果集ID,
    rsc.name AS 列名,
    rsr.value AS 列值
FROM 
    [SSISDB].[catalog].[executions] e
INNER JOIN 
    [SSISDB].[catalog].[execution_result_sets] rs ON e.execution_id = rs.execution_id
INNER JOIN 
    [SSISDB].[catalog].[result_set_columns] rsc ON rs.result_set_id = rsc.result_set_id
INNER JOIN 
    [SSISDB].[catalog].[execution_result_set_rows] rsr 
        ON rs.execution_id = rsr.execution_id 
        AND rsc.column_id = rsr.column_id
WHERE 
    e.execution_id = $executionId
ORDER BY 
    rs.result_set_id, rsc.column_id
"@

# 执行查询并加载结果到DataTable
$sqlCmd = New-Object System.Data.SqlClient.SqlCommand($sqlQuery, $sqlConn)
$sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($sqlCmd)
$resultTable = New-Object System.Data.DataTable
$sqlAdapter.Fill($resultTable)

# 输出结果集
Write-Host "成功获取SSIS包执行结果集:"
$resultTable | Format-Table -AutoSize

关键注意点

  • 确保你的SSIS包已经配置了返回结果集:比如在包内使用「执行SQL任务」时,要将结果集设置为「完整结果集」并映射到合适的变量,或者包通过脚本任务等方式输出结果到执行上下文。如果包本身没有输出结果集,那上面的查询也拿不到数据。
  • 可以先通过$actualVal.Status判断包执行状态:比如值为Succeeded表示执行正常,Failed则表示执行失败,这时候可以先排查包的执行错误,再去拿结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:11:41