SSI执行sql任务参数映射

SSI执行sql任务参数映射,sql,variables,ssis,Sql,Variables,Ssis,我正在尝试使用SSIS中的任务执行sql脚本 我的脚本只是在一个表中插入一组nambe值对。比如说- 插入mytable(名称、值) 价值观 (?,“值1”), (?,“值2”) 现在,我想将SSIS中定义的变量映射到上面语句中的参数。我试图定义一个标量变量,但我想sql任务不喜欢这样。哦,insert语句中的所有名称参数都解析为一个变量 比如我想要 插入mytable(名称、值) 价值观 ('name1','value1'), ('name1','value2') 当我打开任务的参数映射选项卡

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

我的脚本只是在一个表中插入一组nambe值对。比如说-

插入mytable(名称、值) 价值观 (?,“值1”), (?,“值2”)

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

比如我想要 插入mytable(名称、值) 价值观 ('name1','value1'), ('name1','value2')

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

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

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

如果一个名字有5-10个值,并且迫使我为同一个名字添加多个赋值,那么这很快就会变得失控和麻烦

有没有一个简单的方法可以做到这一点

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

  • 添加一个数据流任务;我假设所有变量都填充了正确的参数,并且知道如何将值传递给它们
  • 创建一个包含需要插入的列的虚拟行,因此使用您最喜欢的源(在本例中,我使用了oledb连接)。一个很好的技巧是定义源中每个列的数据类型,因为在目标表中需要它们。这将使数据流的元数据与插入表()的元数据对齐
  • 然后将多播组件添加到数据流中
  • 对于第一个参数/值,添加一个派生列组件,清晰地命名它,然后继续用变量替换参数的内容
  • 对于需要添加的每个其他参数/值;复制先前创建的派生列组件,从多播组件添加一个额外分支,并根据需要继续替换列参数/值
  • 添加一个union all并联接所有流
  • 插入表格
  • 瞧!()
  • 这种方法的好处是,您可以根据自己的意愿进行扩展。。。使用不同的标准验证每个值,修改数据,添加业务规则,丢弃不符合标准的值(通过检查符合标准的值的完整数量)

    祝你今天愉快

    弗朗西斯科

    PS:我准备了更多的截图。。。但是stackoverflow已经决定我对这个网站太陌生了,不能发布带有图片或两个以上链接的东西(!)哦