本文转自:http://www.cnblogs.com/michaelxu/archive/2009/10/21/1587450.html

问题描述:执行一个存储过程得到一个多条记录的结果集,然后循环这个结果集的每一条记录,根据这条记录的某几个字段执行一个带参数的存储过程,再将返回的结果集插入到一张表中。

Execute SQL Task “Get master records”中通过执行一个存储过程得到一个主结果集,Foreach Loop Container循环每条主记录,Data Flow Task对每条记录进行处理。

1、  先定义变量,如下表

v_BatchList定义为Object用来存储返回的主结果集。v_ID, v_OptionBinary, v_OptionField以及v_OptionTable是主结果集中的部分字段,用于Data Flow Task中执行存储过程时的输入参数。

2、  双击Get master records Task,打开配置窗口,在General页一定要将ResultSet设置为Full result set,即返回整个结果集,如下图。

切换到Parameter Mapping页,将主结果集中返回的字段按需要map到相应的定义好的变量上。我们已经定义了四个变量(v_ID, v_OptionBinary, v_OptionField以及v_OptionTable)用于参数输入,记得Direction设为Output。重要的一点Parameter Name一定要是数字,并以0开始与主结果集中的字段相对应。如我的主结果集返回如下:

那么Parameter Name的对应关系为:

v_ID:  3                      //因为字段ID在结果集中3的位置

v_OptionTable: 0       //因为字段optionTable在结果集中0的位置

v_OptionField: 1        //因为字段optionField在结果集中1的位置

v_OptionBinary: 8     //因为字段optionBinary在结果集中8的位置

这个关系一定要对应好,不然得不到数据。

再切换到Result Set页,增加一个Result,Result Name一定又要设置成0,Variable Name为我们之前定义好的v_BatchList。

3、  双击Foreach Loop Container,打开设置窗口,切换到Collection页,将Enumerator设置为Foreach ADO Enumerator以循环结果集。ADO object source variable选择我们之前定义好的v_BatchList。选择Rows in the first table,如下图。

再切换到Variable Mappings页,配置变量的对应关系,如下图。其中Index跟前面的配置要对应。

4、  双击Data Flow Task,切换到Data Flow页面,这里只有两个控件,一个OLE DB Source和一个OLE DB Destination,分别用来进行数据的取出和插入,如图。

Get option records是根据前面设置的四个参数执行一个存储过程,来得到一个子记录集。

5、  双击Get option records Task,设置好Connection Manager,注意Data access mode选择SQL command用以执行存储过程,记得存储过程要在开头加上下面两句:

SET FMTONLY OFF;

SET NOCOUNT ON;。

执行存储过程语句:

EXEC [dbo].[ConvertOptionBits2Collection] ?, ?, ?,?

?代表输入的参数,这个存储过程需要四个参数。点击Parameter,打开参数设置,增加四个输入参数,注意Parameters的名字一定要与存储过程中的定义相同,Variables选择我们已经定义好的变量,这些变量道这里已经有值了,需要传入到存储过程中。另外要注意的是参数添加的顺序也要与存储过程中的定义相同,不然对应不上。或者可以在执行存储过程的语句把参数名加上。

设置完成后,点击OK完成。

6、  双击OLE DB Destination,对其进行设置,选择好Connection Manager和要插入的表,主要是Columns的对应关系,设置好之后,就可以导数据了。

[转]SSIS OLE DB Source中执行带参数的存储过程的更多相关文章

  1. [转]SSIS中OLE DB Source中如何执行Store Procedure 以得到源数据

    本文转自:http://www.cnblogs.com/michaelxu/archive/2009/10/16/1584284.html 有很多人喜欢在OLE DB Source中执行Store P ...

  2. [转]Mapping Stored Procedure Parameters in SSIS OLE DB Source Editor

    本文转自:http://geekswithblogs.net/stun/archive/2009/03/05/mapping-stored-procedure-parameters-in-ssis-o ...

  3. 在Java中调用带参数的存储过程

    JDBC调用存储过程: CallableStatement 在Java里面调用存储过程,写法那是相当的固定: Class.forName(.... Connection conn = DriverMa ...

  4. Sql Server 带参数的存储过程执行方法

    Sql Server 带参数的存储过程执行方法 Visual C# 动态操作 SQL Server 数据库实例教程(4):带参数的存储过程执行方法 上一篇文章介绍了带参数的SQL语句执行方法和不带参数 ...

  5. ThreadStart中如何带参数

    1.ThreadStart 线程执行带参数的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); })); ...

  6. C# ThreadStart中如何带参数

    1.ThreadStart 线程执行带参数的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); })); ...

  7. c#调用Mysql带参数的存储过程

    1.首先创建一个带参数的存储过程 ①存储过程名称=proc_bookinfo  ②存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount ③ 这个存储过 ...

  8. oracle存储过程(带参数的存储过程)

    带参数的存储过程 举例:为指定的员工涨100元的工资,打印涨前和涨后的工资 如果带参,需要指定是输入参数还是输出参数 create or replace procedure raisesalary(e ...

  9. 如何在c#代码中执行带GO语句的SQL文件

      需要在C#代码中执行一个SQL文件的内容.遇到了两个问题: 1. 因为SQL文件中有"GO"语句,执行时报错"Incorrect syntax near 'GO'.& ...

随机推荐

  1. python_day3学习笔记

    set集合 python的set是一个无序不重复元素集,基本功能包括关系测试和消除重复元素. 集合对象还支持并.交.差.对称差等. sets 支持 x in set. len(set).和 for x ...

  2. 获取GUID的方法

    uses QString; procedure TForm12.btn1Click(Sender: TObject); var g: TGUID; begin //方法1(Guid的Helper)-- ...

  3. [转]6个HelloWorld

    原文地址:点击打开链接 转这个帖子,是因为看了这个帖子使我明白了一个道理:一旦你发散自己的思维,激发自己的创意,就会发现原来编程是这么的好玩. 原文标题为<6个变态的C语言Hello World ...

  4. 将Sphinx的日志放置到/dev/shm里需要注意的事情

    可以采用定时器控制,清空日志的办法: 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo “ ...

  5. 【Mac电脑】Jenkins的安装

    1.JDK自己下载安装喽, 2.下载Jenkins 下载路径:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenki ...

  6. asp.net webform 打造私人后台管理系统(附源码)

    系统简介 git地址:https://github.com/qingfengjun/XSSystem 不少人让我做公司的网站,要求不多,但是需要有一个后台系统,所以就有了开发的动力.也想做个系统自己学 ...

  7. Linux上安装MongoDB

    使用本教程使用.rpm 软件包在红帽企业Linux或CentOS Linux版本6和7上安装MongoDB Community Edition . 平台支持 本安装指南仅支持64位系统.详细信息请参见 ...

  8. CentOS 7.4 下面安装 jdk 10 的一点总结

    CentOS 7.4 下面安装 jdk 10 的一点总结 一.前期工作 1.检验系统原版本 [root@zck ~]# java -version java version "1.7.0_& ...

  9. CF 某套题 O :Grid (简单BFS)

    题意: 从左上角跳到右下角最少需要多少步,跳的规则为:可以向四个方向的任意一个方向跳当前格子中的步数,若跳不到右下角输出IMPOSSIBLE. 题解: BFS搜索,注意判断边界,标记. 代码: #in ...

  10. ZSTU OJ 4273 玩具

    枚举,二分,$RMQ$. 肯定是将连续一段中最大值免去花费,枚举起点之后,二分终点即可.可以证明单调性. #include<map> #include<set> #includ ...