SSIS如何将单个记录拆分为两个不同的记录?
我有一个产品记录,有多个“分区”价格,每个销售该产品的商店有一个SSIS如何将单个记录拆分为两个不同的记录?,ssis,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
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 server的理想目标)。如果在输出下将“SynchronousInputID”设置为None,则为每个记录输出调用AddRow():
With Output0Buffer
.AddRow()
.fieldname = "some value"
End Width
With Output0Buffer
.AddRow()
.fieldname = "some value"
End Width
但我仍然不知道如何将值设置为null。Null不起作用,System.DBNull是一种类型,而不是一个值。如果在输出下将“SynchronousInputID”设置为None,则为每个记录输出调用AddRow()
With Output0Buffer
.AddRow()
.fieldname = "some value"
End Width
With Output0Buffer
.AddRow()
.fieldname = "some value"
End Width
但我仍然不知道如何将值设置为null。Null不起作用,System.DBNull是一种类型,而不是一个值。使用excel源,使用多播将每个值(即PriceA、PriceB、PriceC)拆分为一个流。在拆分数据流中,使用派生列将版本值创建为字符串类型,第一个数据流中的值为“a”。使用union all将数据流再次组合为一个数据流,并将PriceA从第一个流映射到名为Price的输出,将PriceB从第二个流映射到Price,将PriceC从第三个流映射到Price。现在,数据流中的记录数是开始时的三倍 使用excel源,使用多播将每个值(即PriceA、PriceB、PriceC)拆分为一个流。在拆分数据流中,使用派生列将版本值创建为字符串类型,第一个数据流中的值为“a”。使用union all将数据流再次组合为一个数据流,并将PriceA从第一个流映射到名为Price的输出,将PriceB从第二个流映射到Price,将PriceC从第三个流映射到Price。现在,数据流中的记录数是开始时的三倍 这里的另外两个建议是正确的,并且会起作用,但是已经有一个内置的数据流任务,它可以执行此类操作,而无需手动管理多播/联合或脚本任务。它也可能更易于维护
此操作通常被称为unpivot,因为pivot将行转换为列,也就是将列转换为行,SSIS工具箱中有和转换可用。这里的其他两个建议是正确的,可以使用,但是已经有一个内置的数据流任务可以执行这种操作,而无需手动管理多播/联合或脚本任务。它也可能更易于维护 此操作通常被称为unpivot,因为pivot将行转换为列,也就是将列转换为行,而且SSIS工具箱中有和转换