none
SSIS 根据参数执行不同的存储过程 RRS feed

  • 问题

  • OS: WIN SERVER 2003

    SSIS: SQL SERVER 2005

    目标: 将多个纬度表导出成CSV文件

    1.我创建多个储过程,每个存储过程对应一个纬度表,这样子,当检查逻辑改变的时候,可以直接修改存储过程.

    2.创建一张配置表,把所有的存储过程名子存储到配置表里.

    3.在SSIS里循环配置表,执行不同的存储过程,将数据导出成CSV.

    现在的问题是:循环内部的数据流任务里,OLEDB 的SQL COMMAND如何才能执行不同的存储过程(我是将存储过程的名子以参数的形式传到数据流任务里的.)

    谢谢


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 8:03

答案

  • 1. 获取要执行的存储过程列表

    在控制流中添加 "执行 SQL 任务",  "常规"中, "SQL Statment" 中设置你的查询, "结果集--Result Set" 选择"完整结果集"

    "结果集" 选项卡, 结果名称设置为"0", 变更名那里面设置一个 Object 类型的变更(没有的话就新建一个)

    2. 循环

    添加一个"For eatch 循环任务", 集合中, 选择枚举器为 For eatch ADO 枚举器

    变量映射那里面映射一个变量, 注意索引与你第一步输出的列对应起来, 一般建议第一步的输出只有一个列, 这样这里面直接映射索引为0的那列就行了

    这里面定义的变量注意一下, 为变量设置一个初始值, 值的结果为你的任意一个查询, 但是这个查询结果的结构要与你正式获得数据的结构一致, 这个主要是为后面的数据流设置做准备

    3. 数据流

    添加一个数据流任务, 并且切换到数据流定义

    在数据流中添加一个 OLEDB 源, 数据方式模式选择变量中的SQL命令, 并且选择循环中映射的那个变量, 在变量值那里面可以看到你初始化设置的变量值, 这样当你点列的时候可以得到列的名字

    剩下的就根据你的需要做

    如果只是要看看有没有问题, 可以在数据流中随便添加一个任务, 比如排序, 简单地把 OLEDB 源和这个任务连起来, 设置好, 两个任务连接的绿线上, 右键--编辑, 在出来的窗口中选择"数据查看器", 启用数据查看器 给选上

    这样你执行的时候, 可以通过这个数据查看器来观察流中的数据

    2012年11月22日 0:01

全部回复

  • 根据参数配置不同的动态SQL语句。


    Microsoft

    2012年11月21日 8:25
  • 根据参数配置不同的动态SQL语句。


    Microsoft

    能明确点吗?

    我参数是存储过程的名子,OLEDB里应该如何设置?


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 8:32
  • OS: WIN SERVER 2003

    SSIS: SQL SERVER 2005

    目标: 将多个纬度表导出成CSV文件

    1.我创建多个储过程,每个存储过程对应一个纬度表,这样子,当检查逻辑改变的时候,可以直接修改存储过程.

    2.创建一张配置表,把所有的存储过程名子存储到配置表里.

    3.在SSIS里循环配置表,执行不同的存储过程,将数据导出成CSV.

    现在的问题是:循环内部的数据流任务里,OLEDB 的SQL COMMAND如何才能执行不同的存储过程(我是将存储过程的名子以参数的形式传到数据流任务里的.)

    谢谢


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 8:46
  • 循环的输出,把存储过程的名字输出到变量

    数据洲的 OLEDB 数据源, 数据方式模式选择“变量中的SQL语句”,变量名字选择循环任务输出的那个变量

    2012年11月21日 8:57
  • 不过, 问题应该在于,你的不同的存储过程,得到的结果集的结构应该是不一样的,而在数据流中,结构是要先确定的

    所以这种方法应该行不通吧?

    2012年11月21日 8:58
  • 我就是这么想的.

    我是先执行一个SQL任务,获取到配置表里所有的存储过程名子,给SSIS里的一个OBJECT类型变量1

    然后执行FOREACH容器,循环把变量1的不同值给别一个STRING变量2

    现在好像FOREACH就出了问题,没有得到变量1的值.

    新手啥时间能熬成精英啊!


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 9:24
  • 其实,我最终的目的是要适应不同结构集的.

    不过,现在先忽略这个问题,因为我把所有的输出结构全部配置成同一结构了.


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 9:26
  • 关注一下

    给我写信: QQ我:点击这里给我发消息

    2012年11月21日 13:20
  • 我汗!

    我等着邹老大教我呢 呵呵


    既然选择了远方,便只顾风雨兼程!

    2012年11月21日 15:19
  • 1. 获取要执行的存储过程列表

    在控制流中添加 "执行 SQL 任务",  "常规"中, "SQL Statment" 中设置你的查询, "结果集--Result Set" 选择"完整结果集"

    "结果集" 选项卡, 结果名称设置为"0", 变更名那里面设置一个 Object 类型的变更(没有的话就新建一个)

    2. 循环

    添加一个"For eatch 循环任务", 集合中, 选择枚举器为 For eatch ADO 枚举器

    变量映射那里面映射一个变量, 注意索引与你第一步输出的列对应起来, 一般建议第一步的输出只有一个列, 这样这里面直接映射索引为0的那列就行了

    这里面定义的变量注意一下, 为变量设置一个初始值, 值的结果为你的任意一个查询, 但是这个查询结果的结构要与你正式获得数据的结构一致, 这个主要是为后面的数据流设置做准备

    3. 数据流

    添加一个数据流任务, 并且切换到数据流定义

    在数据流中添加一个 OLEDB 源, 数据方式模式选择变量中的SQL命令, 并且选择循环中映射的那个变量, 在变量值那里面可以看到你初始化设置的变量值, 这样当你点列的时候可以得到列的名字

    剩下的就根据你的需要做

    如果只是要看看有没有问题, 可以在数据流中随便添加一个任务, 比如排序, 简单地把 OLEDB 源和这个任务连起来, 设置好, 两个任务连接的绿线上, 右键--编辑, 在出来的窗口中选择"数据查看器", 启用数据查看器 给选上

    这样你执行的时候, 可以通过这个数据查看器来观察流中的数据

    2012年11月22日 0:01
  • 您好!

    根据您提问的内容,我将这个帖子移动到了

     

    企业应用平台 Enterprise Application Platform 论坛 SQl子论坛以便获得更好的支持。

    谢谢!


    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework

    2012年11月22日 2:42
  • SSIS 支持参数 脚本

    你可以将存储过程作为参数,在脚本中修改,然后执行即可。


    family as water

    2012年11月22日 2:44
  • 你好,

    由于你发了2个相同的帖子,我现在把它们合并成一个帖子。

    Thanks,
    Amy Peng


    Description: Description: TechNet 论坛好帮手立刻免费下载TechNet论坛好帮手

    2012年11月22日 5:25
    版主
  • 谢谢大家的帮助


    既然选择了远方,便只顾风雨兼程!

    2012年11月22日 9:21