1

我有标准关系的树表、客户、发票和发票行。

这些我必须导出到一个固定字段长度的文件中,每行的前两个字符标识行类型。行类型有不同的规格。

我可能可以在脚本块中使用嵌套循环来做到这一点,但这是我的第一个 SSIS 包,这个解决方案感觉不对。

编辑:

输出必须具有:

Customer  
Invoice  
Rows  
Customer  
Invoice  
Rows  
and so on
4

3 回答 3

1

您对使用 Script Destination 组件执行此操作的直觉是正确的。不幸的是,这种情况与 SSIS 不符。我不认为这是一个初学者包。如果您必须使用 SSIS,那么我将从内部连接所有数据开始,以便每个 InvoiceRow 有一行,其中包含所有三个表所需的数据。

CustomerCols、InvoiceCols、RowCols

然后,在脚本目标组件中,您需要跟踪客户和发票值,因为它们会发生变化,您需要将额外的行写入输出。

有关脚本目标的更多信息,请参阅使用脚本组件创建目标。

我的经验表明,脚本目标可以具有良好的性能。

于 2008-10-18T04:38:11.397 回答
1

我会避免编写 Script Destination,而只使用 Script Transform + Flat File Destination。这样,您可以专注于逻辑输出(数据字符串),同时允许 SSIS 对文件进行实际写入(它可能更高效,而且您专注于您的业务,而不是写入文件)。

首先,您需要获取非规范化数据。您可以在 DBMS 中进行连接和排序,但如果您不想对 DBMS 施加太大压力 - 只需从中获取排序数据并使用两个 SSIS Merge Join 转换将其合并。

然后执行脚本:保持当前客户和发票的运行值,当它们改变时输出它们,在每个输入上输出 InvoiceRow。像这样的东西:

if (this.CustomerID != InputBuffer.CustomerID) {
  this.CustomerID = InputBuffer.CustomerID;
  OutputBuffer.AddRow();
  OutputBuffer.OutputColumn = "Customer: " + InputBuffer.CustomerID + " " + InputBuffer.CustomerName;
}
// repeat the same code for Invoice

OutputBuffer.AddRow();
OutputBuffer.OutputColumn = "InvoiceRow: " + InputBuffer.InvoiceRowPrice;

最后,添加一个带有单列的平面文件目标(由脚本创建的输出列)以将其写入文件。

于 2008-10-21T05:54:48.900 回答
0

处理您的三个表,以便输出都适合您的输出文件(包括行类型指示符)。您必须在数据流中的三个单独的流路径中执行此操作,然后将这些行放在一个 Union All 数据流元素中。从那里,根据需要处理它们以创建输出文件。

于 2008-10-17T19:00:52.077 回答