SSIS如何将单个记录拆分为两个不同的记录?

时间:2010-05-15 00:21:44

标签: ssis

我的产品记录有多个“分区”价格,每个商店都有一个销售产品。

ProductID int
Name      string
PriceA    money
PriceB    money
PriceC    money

在SQL Server Integration Services中,我需要将其拆分为多个记录:

ProductID int
Version   string  // A, B, or C
Price     money   // PriceA if A, PriceB if B, etc.

这将在数据流中,我认为是Excel源和OLE DB目标之间的转换。 (假设OLE DB是MS SQL服务器的理想目标)。

3 个答案:

答案 0 :(得分:2)

使用excel源,使用多播将每个值拆分为一个流(即PriceA,PriceB,PriceC)。在拆分数据流中,使用派生列将您的版本值创建为第一个数据流中值为“A”的字符串类型等。使用union all将数据流再次合并为一个数据流,并将PriceA从第一个流映射到输出称为Price,将PriceB从第二流映射到Price,并将PriceC从第三流映射到Price。您现在拥有的数据流的记录数是您开始时的三倍。

答案 1 :(得分:2)

这里的其他两个建议是正确的并且可以工作,但是已经有一个内置的数据流任务可以执行这种操作,而无需手动管理多播/联合或脚本任务。它也可能更易于维护。

此操作通常称为unpivot,因为数据透视表将行转换为列,这会将列转换为行,并且SSIS工具箱中提供了pivotunpivot转换。

答案 2 :(得分:0)

如果在Output下将“SynchronousInputID”设置为None,则为每个记录输出调用AddRow():

With Output0Buffer
    .AddRow()
    .fieldname = "some value"
End Width 
With Output0Buffer
    .AddRow()
    .fieldname = "some value"
End Width

但我仍然不知道如何将值设置为null。 Null不起作用,System.DBNull是一个类型,而不是值。