SSIS执行sql任务参数映射

时间:2011-05-25 20:36:52

标签: sql variables ssis

我正在尝试使用SSIS中的任务执行sql脚本。

我的脚本只是在表中插入一堆nambe值对。例如 -

插入mytable(名称,值) 值 (?,'value1'), (?,'value2')

现在,我想映射SSIS中定义的变量,以映射到上面语句中的参数。我尝试定义一个标量变量,但我猜sql任务不喜欢这样。哦,insert语句中的所有名称参数都解析为单个变量。

例如我想要的 插入mytable(名称,值) 值 ('name1','value1'), ('name1','value2')

当我打开任务的参数映射选项卡时,它希望我像每个参数一样映射每个参数 -

变量名称 - 用户::名称 方向 - 输入 数据类型 - 长 参数名称 - 0 参数大小 - -1

变量名称 - 用户::名称 方向 - 输入 数据类型 - 长 参数名称 - 1 参数大小 - -1

如果名称有5-10个值,这很快就会失控并且很麻烦,并迫使我为同一个名称添加多个作业。

有一种简单的(-ier)方法吗?

1 个答案:

答案 0 :(得分:2)

最简单(也是最易扩展)的方法是使用数据流任务而不是使用执行SQL任务。

  1. 添加数据流任务;我假设您已经使用正确的参数填充了所有变量,并且您知道如何将值传递给它们。
  2. 使用您需要插入的列创建一个虚拟行,因此请使用您最喜欢的任何来源(在此示例中,我使用了oledb连接)。一个很好的提示是定义源中每列的数据类型,因为在目标表中需要它们。这将使数据流的元数据与插入表(Screenshot #1)。
  3. 对齐
  4. 然后将多播组件添加到数据流。
  5. 对于第一个参数/值,添加派生列组件,将其命名为干净并继续用变量替换参数内容。
  6. 对于需要添加的每个其他参数/​​值;复制先前创建的派生列组件,从多播组件添加一个额外分支,然后根据需要替换列参数/值。
  7. 添加union all并加入所有流程
  8. 插入表格
  9. 瞧! (Screenshot #2
  10. 这种方法的好处在于,您可以根据需要进行扩展...使用不同的标准验证每个值,修改数据,添加业务规则,丢弃不符合要求的值(通过检查符合的完整数量)价值观)......!

    度过美好的一天!

    旧金山。

    PS:我准备了更多的截图...但是stackoverflow已经决定我对网站来说太新了用图片或两个以上的链接发布东西(!)哦好吧..