SSIS中ODBC源场景下如何使用变量调用存储过程并获取结果
我来一步步帮你搞定这个问题!你已经定义好生成存储过程调用语句的变量了,接下来用两种常用方式就能执行它并获取返回结果,分别对应SQL执行任务和数据流任务,我都给你讲明白:
方法一:用Execute SQL Task(SQL执行任务)获取结果
这种方式适合先把结果存到变量里,后续再做处理的场景:
- 先在控制流面板拖一个Execute SQL Task,双击打开编辑窗口
- 在「General」标签页:
- 选好对应数据库的OLE DB连接管理器
- 把SQLSourceType改成「Variable」,然后在「SourceVariable」里选中你定义的
User::callProcedureQuery - 重点:因为你要获取存储过程的返回结果,记得把ResultSet设置成「Full result set」(如果是单结果集)或者「Multiple result sets」(多结果集)
- 切换到「Result Set」标签页:
- 点击「Add」,把Result Name设为
0(对应第一个结果集),然后选择一个Object类型的变量来存储结果——你可以新建一个比如User::StoredProcResult的变量,类型设为Object就行 - 保存设置后,执行这个任务,存储过程返回的结果就会被存到这个Object变量里。要是后续想遍历处理数据,还能搭配Foreach Loop Container来逐个读取数据行
- 点击「Add」,把Result Name设为
方法二:用数据流任务直接处理结果
如果想直接对返回的结果做转换、写入目标等操作,用数据流任务更方便:
- 在控制流里拖一个Data Flow Task,双击进入数据流编辑面板
- 拖一个OLE DB Source组件进来,双击编辑:
- 选择对应的OLE DB连接管理器
- 在「Data access mode」里选「SQL command from variable」,然后在「Variable name」里选中
User::callProcedureQuery - 切换到「Columns」标签,确认要获取的列都正确显示,没问题就保存
- 接下来就可以根据你的需求添加后续组件了:比如拖个OLE DB Destination把结果写入数据库表,或者用Derived Column做数据清洗转换,直接处理存储过程返回的结果就行
几个关键注意点
- 先验证你的表达式生成的SQL语句是否正确!可以右键
callProcedureQuery变量,选「变量值」把生成的语句复制出来,到数据库客户端里执行一遍,确保语法和参数都没问题,避免运行时踩坑 - 要是你的存储过程有输出参数或者返回值,也能在Execute SQL Task里配置参数映射,但看你的表达式已经把参数直接拼进SQL里了,所以重点关注结果集配置就行
- 确保变量的作用域是包级的,或者至少被你用的任务能访问到,不然会找不到变量哦
内容的提问来源于stack exchange,提问作者Abdulquadir Shaikh
相关产品推荐
相关产品推荐

