Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS如何将单个记录拆分为两个不同的记录?_Ssis - Fatal编程技术网

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工具箱中有和转换