我对SSIS缺乏经验,尽管我在SQL和C#以及其他技术方面有很多经验。
我正在将我作为独立c#console应用程序编写的任务转换为SSIS包。
我有一个OLEDB输入源,它是一个SQL命令,它收集数据库中的某些数据,然后我将其输入到脚本组件转换中。我使用输入字段作为基于OAuth的restful Web服务的参数,这需要很多自定义C#代码才能完成。 Web服务返回一个XML respose,其中包含必须为每个输入行输出的许多行。
我对脚本转换如何工作的理解是,它或多或少是一行,一行。
我真的有几个问题。
更新:
来自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 DataSource返回用户的数据集。用户数据集被输入脚本并用作Web服务调用的参数。 Web服务调用返回一组XML结果,这些结果具有必须从脚本输出的多个“行”数据。
在上面的数据中,脚本的输出将是输入源中提供的每个用户的多行col1,col2和col3。我需要一种方法来提取这些元素,并将它们放入输出缓冲区中的每列xml数据的列中。或者,一种简单地使xml成为脚本输出并将输出提供给另一个组件以将xml解析为行的方法(就像XML源一样,但显然你不能将XML源放在数据中间)流动)。
答案 0 :(得分:2)
回答我的意思
这取决于但通常,如果您的数据位于数据库中,则OLE DB或ADO.NET源是将其注入管道的首选组件。更好?这取决于您的需求,但有没有理由认为不是明智的?使用数据流的好处是内置缓冲,并行,日志记录,配置等。我假设或其他一些原因导致您将.NET应用程序移动到Integration Services包中,所以我想如果你'重新进入这个空间,全力以赴。
当然。内置的网络服务是低于工业强度的。您已熟悉.NET,因此您可以充分利用该组件。
是。您对1:1输入的假设:输出仅用于默认行为。默认情况下,脚本组件是同步的,因此您可以观察到,每一行都有一个输出。但是,通过将脚本组件更改为asynchronous组件,您可以将1B行转换为单行输出,或者让1行源生成N行输出。我不得不为物料清单类型问题做后者 - 我会收到一个父ID,我必须查找与父项关联的所有子行。无论如何,链接的MSDN文章描述了如何使其异步。
我不太清楚你要求解决这个问题。假设这个假人的一些例子,我会看它是否点击。