Как пропустить последнюю строку в потоке данных служб SSIS

Я использую FlatFile Source Manager -> Script COmponent as Trans -> OLEDB destination в моем потоке данных.

Источник читает все строки из плоского файла, и я хочу пропустить последнюю строку (запись трейлера), обновляя базу данных.

Поскольку он содержит NULL значения, база данных выдает ошибку.

Пожалуйста, помогите мне, как решить эту проблему.

С уважением, VHK

2 ответа

Решение

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

  • Чтение данных из плоского файла с использованием исходного компонента.
  • использование Conditional Split компонент, а в case expression предоставить как !ISNULL(Column1) && !ISNULL(Column2) (Column1 и Column2 могут быть по вашему желанию. Если ваш плоский файл имеет столбец с именем, скажем, ID и он не имеет нулевого значения, кроме последней строки, то вы можете использовать как !ISNULL(ID)).
  • Сопоставьте выходные данные случая с пунктом назначения OLEDB.

Надеюсь, это вам очень поможет.

Чтобы проигнорировать последнюю строку, вы должны сделать следующие шаги:

  1. Добавить DataFlow Task (давайте назовем это DFT RowCount )
  2. Добавить глобальную переменную типа System.Int32 (Имя: Пользователь::RowCount)
  3. В этой задаче DataFlow добавить Flat File Source (Файл, который вы хотите импортировать)
  4. Добавить RowCount компонент рядом с Flat File Source
  5. Карта RowCount результат переменной User::RowCount

  1. Добавить еще DataFlow Task (давайте назовем это DFT Import )

  1. В DFT Import добавить Flat File Source (Файл, который нужно импортировать)
  2. Добавить Script Component сразу после Flat File Source
  3. добавлять User::RowCount Переменная для сценария ReadOnly Переменные

  1. Добавить столбец вывода типа DT_BOOL (Название: IsLastRow)

  1. В окне скриптов напишите следующий скрипт

    Dim intRowCount As Integer = 0
    Dim intCurrentRow As Integer = 0
    Public Overrides Sub PreExecute()
        MyBase.PreExecute()
        intRowCount = Variables.RowCount
    End Sub
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        intCurrentRow += 1
    
        If intCurrentRow = intRowCount Then
            Row.IsLastRow = True
        Else
            Row.IsLastRow = False
        End If
    
    End Sub
    
  2. Добавить Conditional Split Рядом с компонентом сценария

  3. Разделить строки, используя следующее выражение

    [IsLastRow] == False
    

  1. Добавить OLEDB Destination рядом с условным разделением

Примечание: если вы хотите игнорировать строки для другого случая (не для последней строки), просто измените сценарий, написанный в компоненте сценария, в соответствии с вашими требованиями

Другие вопросы по тегам