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

SSIS中ODBC源Execute SQL Task执行报错求助

排查SSIS Execute SQL Task ODBC连接"Disconnected recordsets are not available"报错

我的SSIS配置情况

我在SSIS中创建了一个SQL源类型为变量的Execute SQL Task,定义了以下变量:

  • startTime:提供当前时间
  • endTime:提供结束时间
  • startTimeFormat:用于将日期格式化为解析记录所需的格式,表达式为:
startTimeFormat = (DT_WSTR, 4)DATEPART( "yyyy", @[User::startTime]) +"-" + RIGHT( "0" + (DT_WSTR, 2) MONTH(@[User::startTime]), 2) +"-" + RIGHT( "0" + (DT_WSTR, 2) DAY(@[User::startTime]), 2) +" " + (DT_WSTR, 2)DATEPART( "Hh", @[User::startTime] ) + ":" + (DT_WSTR, 2)DATEPART( "mi", @[User::startTime] ) + ":" + (DT_WSTR, 2)DATEPART( "ss", @[User::startTime] )
  • endTimeFormat:用于将日期格式化为解析记录所需的格式,表达式为:
endTimeFormat: (DT_WSTR, 4)DATEPART( "yyyy", @[User::endTime] ) +"-" + RIGHT( "0" + (DT_WSTR, 2) MONTH( @[User::endTime] ), 2) +"-" + RIGHT( "0" + (DT_WSTR, 2) DAY(@[User::endTime] ), 2) +" " + (DT_WSTR, 2)DATEPART( "Hh", @[User::endTime]) + ":" + (DT_WSTR, 2)DATEPART( "mi", @[User::endTime]) + ":" + (DT_WSTR, 2)DATEPART( "ss", @[User::endTime])
  • callProcedureQuery:用于构建存储过程调用语句,供Execute SQL Task使用,语句为:
"call sp_ccdr ('"+ @[User::startTimeFormat] + "', " + "'" + @[User::endTimeFormat] + "', '0',null,null,null,null,null,null,null,null,null,'NULL','NULL','f'"+ ")"

在Execute SQL Task中,我设置返回完整结果集,并创建了类型为object的变量varExecTaskRslt,将结果名称0映射到该变量。

当前变量解析正常,但执行Execute SQL Task时出现报错:

[Execute SQL Task] Error: Executing the query "call sp_ccdr ('2018-05-13 14:47:30', '2018-05-13 1..." failed with the following error: "Disconnected recordsets are not available from ODBC connections.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

报错原因排查与解决方案

这个报错的核心原因是ODBC连接不支持SSIS中"完整结果集"(Full Result Set)的返回方式,ODBC驱动在处理这种结果集时有局限性,无法返回断开连接的记录集。下面是具体的排查和解决步骤:

1. 确认连接类型的限制

SSIS的Execute SQL Task在使用ODBC连接时,对于返回结果集的支持有限:

  • 如果你选择"完整结果集",ODBC驱动无法将结果集以断开连接的方式返回给SSIS变量(这是ODBC驱动的固有局限)。
  • 相比之下,OLE DB连接通常没有这个限制,能完美适配你当前的变量映射逻辑。

2. 解决方案1:更换为OLE DB连接

如果你的数据源支持OLE DB驱动,建议直接将Execute SQL Task的连接管理器从ODBC更换为OLE DB类型。这是最直接的解决方法,不需要调整现有结果集和变量的配置,就能消除报错。

3. 解决方案2:修改结果集类型(如果无法更换连接)

如果必须使用ODBC连接,你需要调整Execute SQL Task的结果集设置:

  • 选择**"单行结果集"(Single Row Result Set)**:如果存储过程返回单行数据,这种方式可以正常捕获结果。
  • 选择**"无结果集"(No Result Set)**:如果不需要捕获返回的结果,只是执行存储过程完成业务操作。
  • 若确实需要获取多行结果集,可以拆分步骤:
    1. 先通过Execute SQL Task执行存储过程,将结果写入数据库临时表。
    2. 再使用另一个Execute SQL Task(ODBC连接)查询临时表,通过"逐行结果集"(ResultSet = "Rowset")或者数据流任务(Data Flow Task)来读取数据。

4. 额外检查:存储过程的输出确认

也可以先单独执行存储过程sp_ccdr,确认它确实返回了预期的结果集,避免是存储过程本身没有输出导致的问题。比如在数据库客户端执行:

call sp_ccdr ('2018-05-13 14:47:30', '2018-05-13 14:47:30', '0',null,null,null,null,null,null,null,null,null,'NULL','NULL','f')

验证是否能正常返回数据,排除存储过程本身的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:41