Как заставить SSIS отключить создание строк, даже если значения равны нулю - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть этот плоский файл, который я импортирую, и он должен быть отменен.Все работает хорошо, за исключением того, что я хотел бы, чтобы unpivot выравнивал строки, если значение равно нулю.

Я не хочу прибегать к какому-то хаку, чтобы добавить -1 и заменить -1 после.

Программное обеспечение, использующее базу данных, должно иметь всегда 3 строки для каждой строки.который был импортирован из плоского файла, даже если он имеет нулевое значение.

Некоторые чертежи, объясняющие проблему

плоская линия файла


-----------------------------------------------------------------
|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 голосов
/ 14 февраля 2012

Я думаю, что это таблица, которую вы хотели получить, чтобы получить желаемый результат.

-----------------------------------------------------------------
|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;
    }

Это создаст 3 новые строки для каждогострока.Я предположил, что ваш идентификатор ID .

...