ssis - 每个单行输入从脚本组件输出多行

标签 ssis

尽管我在 SQL 和 C# 以及其他技术方面拥有丰富的经验,但我对 SSIS 的经验还很缺乏。

我正在将作为独立 C# 控制台应用程序编写的任务转换为 SSIS 包。

我有一个 OLEDB 输入源,它是一个 SQL 命令,它收集数据库中的某些数据,然后将其输入到脚本组件转换中。我使用输入字段作为基于 OAuth 的 Restful Web 服务的参数,这需要大量自定义 C# 代码才能完成。 Web 服务返回一个 XML 响应,其中包含必须为每个输入行输出的许多行。

我对脚本转换如何工作的理解是,它或多或少是一行入,一行出。

我真的有几个问题。

  1. 以这种方式使用输入源是个好主意吗?或者是否有更好的方法将输入行输入到我的网络服务中?
  2. 脚本组件转换是在这里使用的正确工具吗?我无法使用普通的 Web 服务,因为该 Web 服务不是基于 SOAP 或 WCF,并且在请求中需要 OAuth。 (或者有没有办法以这种方式使用网络服务组件?)
  3. 如何为每个输入行输出多行?
  4. SSIS 是否支持获取 XML 结果(包含多行)并将它们映射到脚本转换中输出字段的行的方法?我知道有一个 XML 输入源,但实际上不是这个。我正在考虑采用 XML 输入并输出数据行的方法

更新:

来自 Web 服务的数据如下所示(省略了多余的内容):

<user>
  <item>
    <col1>1</col1>
    <col2>2</col2>
    <col3>3</col3>
  </item>
  <item>
    <col1>1</col1>
    <col2>2</col2>
    <col3>3</col3>
  </item>
  ....
</user>

本质上,SQL 数据源返回用户的数据集。用户数据集被输入到脚本中并用作 Web 服务调用的参数。 Web 服务调用返回一组 XML 结果,其中包含必须从脚本输出的多“行”数据。

在上面的数据中,对于输入源中提供的每个用户,脚本的输出将是多行 col1、col2 和 col3。我需要一种方法来提取这些元素并将它们放入每行 xml 数据的输出缓冲区中的列中。或者,一种简单地使 xml 作为脚本的输出并将该输出提供给另一个组件以将 xml 解析为行的方法(就像 XML 源一样,但显然您不能将 XML 源放在数据中间)流)。

最佳答案

回答我能回答的

以这种方式使用输入源是个好主意吗?或者是否有更好的方法将输入行输入到我的网络服务中?

这取决于情况,但一般来说,如果您的数据位于数据库中,则 OLE DB 或 ADO.NET 源是将其注入(inject)管道的首选组件。更好的?这取决于您的需求,但您是否有理由认为这是可取的?使用数据流的好处在于缓冲、并行、日志记录、配置等。我假设这个或其他一些原因导致您将 .NET 应用程序移动到集成服务包中,所以我认为如果您'搬进这个空间,全力以赴。

脚本组件转换是在这里使用的正确工具吗?

当然。内置的网络服务功能不及工业强度。您已经熟悉 .NET,因此您可以充分利用该组件。

如何为每个输入行输出多行?

是的。您对 1:1 输入:输出的假设仅适用于默认行为。默认情况下,脚本组件是同步的,因此正如您所观察到的,每一行都有一个输出。但是,通过将脚本组件更改为 asynchronous组件,那么您可以将 1B 行转换为单行输出,或者让 1 行源生成 N 行输出。对于 Material list 类型问题,我必须执行后者——我会收到一个父 ID,并且必须查找与父级关联的所有子行。不管怎样,链接的 MSDN 文章描述了如何使其异步。

SSIS 是否支持获取 XML 结果的方法

我不太明白您要解决这个问题的目的。为这个虚拟对象举一些例子,我看看它是否有效。

关于ssis - 每个单行输入从脚本组件输出多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627124/

相关文章:

sql - SSIS 结果集、Foreachloop 和变量

c# - 在ssis中添加对脚本任务的引用

c# - 在Excel顶部插入记录

sql-server - 如何遍历ssis中的文件夹和文件

ssis - 事实表核对或验证

sql-server - SSIS将具有不同类型列的表导出到平面文件中

c# - 允许进程自动继续的 MessageBox

sql-server - 将多个表复制到一个表中(从多个数据库)

visual-studio-2010 - SSIS 包在 VS 2010 中不可见

sql-server - 如何在 SSIS 中创建日志文件