如果值为null,如何告诉SSIS unpivot创建行

时间:2012-02-10 14:46:36

标签: sql-server tsql ssis unpivot

我有这个导入的平面文件,它需要不透明。一切正常,除了我希望unpivot使行甚至是值为null。

我不想诉诸某种黑客来添加-1并在之后替换-1。

使用数据库的软件对于从平面文件导入的每一行,总是有3行,即使它的值为null。

一些绘图来解释问题

平面文件行


-----------------------------------------------------------------
|id of person | code1 | value1 | code2 | value2 | code3 | value3|
----------------------------------------------------------------- 
|123          | hh1   | hh2    |  2    | hh3    |       |       |
-----------------------------------------------------------------
What I get is

------------------------------
|id of person | code | value | 
------------------------------
|123          |  hh2 |  2    |
------------------------------
what I want


------------------------------
|id of person | code | value | 
------------------------------
|123          |hh1   | null  |
------------------------------
|123          |hh2   |   2   |
------------------------------
|123          |hh3   | null  |
------------------------------

1 个答案:

答案 0 :(得分:0)

我认为这是你想要得到你想要的结果的表。

-----------------------------------------------------------------
|id of person | code1 | value1 | code2 | value2 | code3 | value3|
----------------------------------------------------------------- 
|123          | hh1   | NULL   |  hh2  |   2    |  hh3  |  NULL |
-----------------------------------------------------------------

如果您可以使用 Unpivot 数据流转换执行此操作,我并不乐观,但您可以在具有异步输出的脚本任务中轻松完成此操作。要使用异步输出,您必须在输入和输出下更改转换脚本任务的输出属性。将 SynchronousInputID 设置为

之后,以下代码应该适合您。

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code1;
        Output0Buffer.Value = Row.Value1;

        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code2;
        Output0Buffer.Value = Row.Value2;

        Output0Buffer.AddRow();
        Output0Buffer.ID = Row.ID;
        Output0Buffer.Code = Row.Code3;
        Output0Buffer.Value = Row.Value3;
    }

这将为每1行创建3个新行。我认为您的标识符是 ID