SSIS: удалить пустую строку из выходного буфера - PullRequest
0 голосов
/ 29 апреля 2011

У меня ошибка в задаче потока данных.

у меня есть источник ado.net, идущий к компоненту асинхронного сценария.

проблема возникает в самом конце вставки из компонента сценария в место назначения, где он

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

Есть ли способ предотвратить это / как я могу манипулировать выходным буфером, чтобы я мог удалить из него определенные строки?

Ответы [ 3 ]

1 голос
/ 04 мая 2012

Чтобы решить эту проблему, я добавил компонент условного разбиения и добавил проверку длины для одного из пустых столбцов (то есть len ([testfield])> 0). Затем я отправил эти поля с этой проверкой в ​​базу данных и ничего не сделал для другой ветви.

1 голос
/ 02 мая 2011

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

По умолчанию компонент сценария является синхронным.Существует одна выходная строка для каждой входной строки.Возможно, это то, что вы сейчас настроили.

Если вы хотите использовать компонент сценария в качестве асинхронного компонента, вам необходимо сделать следующее:

  • Добавить новый компонент сценария
  • Щелкните правой кнопкой мыши по компоненту и выберите Показать расширенный редактор ...
  • В свойствах ввода и вывода выберите элемент «Вывод» и измените значение SynchronousInputID на «Нет»
  • Вкл.На вкладке Вывод добавьте столбцы, которые будут определять выходной буфер.Вы должны определить столбцы, потому что, в отличие от синхронного сценария, выходной буфер не определяется автоматически как совпадение с входным буфером.

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

0 голосов
/ 05 марта 2015

Проблема заключается в том, что SSIS выполняет функцию AddRow () во время PreExecute.Это может привести к конфликту с любым использованием AddRow () в вашей public override void ProcessInputRow() функции.Например, PreExecute создает новую строку для запуска, а затем вы вручную создаете новую строку как часть вашей обработки, теперь у вас есть 2 новые строки, первая из которых заполнена значениями NULLS и уже передана в выходной буфер.Чтобы исправить это, я переопределяю CreateNewOutputRows() и оставляю его пустым, а затем добавляю строки только по мере необходимости, например, некоторые из моих асинхронных сценариев никогда не добавляют строку в выходной буфер, если правильные данные не отображаются во входном буфере..

public class ScriptMain : UserComponent {

    public override void CreateNewOutputRows() {}

    public override void Input_ProcessInputRow(InputBuffer Row) {
       if(asNeeded) {
          OutputBuffer.AddRow();
       }
    }
}
...