2011-05-25 121 views
0

我想在SSIS中使用任务执行sql脚本。SSIS执行sql任务参数映射

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

INSERT INTO MYTABLE(名称,值) 值 ,

现在,我要地图在SSIS中定义一个变量( '值1'?)(, '值'?)被映射到上述语句中的参数。我试着定义一个标量变量,但我猜sql任务不喜欢那个。哦,并且插入语句中的所有名称参数都解析为单个变量。

例如,我想 INSERT INTO MYTABLE(名称,值) 值 ( 'NAME1', 'VALUE1'), ( 'NAME1', '值2')

当我打开参数映射对于任务选项卡,它想我的每个参数映射invidually像 -

变量名称 - 用户名::方向 - 输入 数据类型 - LONG 参数名称 - 参数尺寸 - -1

变量名称 - 用户名::方向 - 输入 数据类型 - LONG 参数名称 - 参数尺寸 - -1

这很快失控和麻烦,如果有5-10名称的值并强制我为同一名称添加多个分配。

有没有一个简单的方法来做到这一点?

回答

2

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

  1. 添加数据流任务;我假设你有所有的变量都用正确的参数填充,并且你知道如何将值传递给它们。
  2. 用你需要插入的列创建一个虚拟行,所以尽可能使用你最喜欢的来源(在这个例子中,我使用了oledb连接)。一个好的提示是定义源中每列的数据类型,因为在目标表中需要它们。这将使数据流的元数据与插入表(Screenshot #1)的元数据对齐。
  3. 然后将多播组件添加到数据流。
  4. 对于第一个参数/值,添加派生列组件,将其命名干净并继续用您的变量替换参数的内容。
  5. 对于每个需要添加的更多参数/值;复制先前创建的派生列组件,从多路广播组件添加一个额外分支,并根据需要继续替换列参数/值。
  6. 加入工会所有,并加入所有的流
  7. 插入到表
  8. 瞧!(Screenshot #2

有关此方法的好处是,当你愿意,你可以使可扩展验证......不同的标准每个值,修改数据,增加业务规则,摒弃不符合规定的值(由检查完整的符合值)......!

祝您有美好的一天!

Francisco。

PS:我已经准备了更多的截图......但是stackoverflow已经决定我对这个网站太新以便发布带有图片或两个以上链接的东西(!)噢..