我的产品记录有多个“分区”价格,每个商店都有一个销售产品。
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服务器的理想目标)。
答案 0 :(得分:2)
使用excel源,使用多播将每个值拆分为一个流(即PriceA,PriceB,PriceC)。在拆分数据流中,使用派生列将您的版本值创建为第一个数据流中值为“A”的字符串类型等。使用union all将数据流再次合并为一个数据流,并将PriceA从第一个流映射到输出称为Price,将PriceB从第二流映射到Price,并将PriceC从第三流映射到Price。您现在拥有的数据流的记录数是您开始时的三倍。
答案 1 :(得分:2)
这里的其他两个建议是正确的并且可以工作,但是已经有一个内置的数据流任务可以执行这种操作,而无需手动管理多播/联合或脚本任务。它也可能更易于维护。
此操作通常称为unpivot,因为数据透视表将行转换为列,这会将列转换为行,并且SSIS工具箱中提供了pivot和unpivot转换。
答案 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是一个类型,而不是值。