Приращение переменных в задаче потока данных - PullRequest
2 голосов
/ 29 сентября 2019

У меня большой текстовый файл, в котором есть несколько разных строк.

Я использую условное разбиение, которое просматривает тип строки (поле 1), а затем выполняет действие, в основном пытаясь увеличитьпеременная, разделить одну строку на несколько столбцов (Derived) и затем записать результаты в таблицу.

Однако при попытке увеличить значение переменной я получаю «Коллекция переменных, заблокированных для доступа на чтение и запись»недоступен за пределами PostExecute. "

Переменная обновляется с помощью компонента сценария.

Я пытался переместить код в PostExecute, однако в этот момент он никогда не увеличивается.


Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

    Dim MaximumKey As Int32 = Me.Variables.SPIParentID ' Grab value of MaxKey which was passed in

    ' NextKey will always be zero when we start the package.
    ' This will set up the counter accordingly
    If (NextKey = 0) Then
        ' Use MaximumKey +1 here because we already have data
        ' and we need to start with the next available key
        NextKey = MaximumKey + 1
    Else
        ' Use NextKey +1 here because we are now relying on
        ' our counter within this script task.
        NextKey = NextKey + 1
    End If

    'Row.pkAAAParentID = NextKey ' Assign NextKey to our ClientKey field on our data row
    Me.Variables.SPIParentID = NextKey
End Sub

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

1 Ответ

2 голосов
/ 29 сентября 2019

Значение переменных SSIS не может быть изменено в задаче потока данных, значение изменяется после выполнения всей задачи потока данных.Каждый раз, когда вы пытаетесь прочитать значение из этой переменной, оно вернет свое значение при выполнении задачи потока данных.Вы можете изменить использование локальной переменной в скрипте для достижения той же логики:

Dim MaximumKey As Int32 = 0 

Public Overrides Sub PreExecute()

    MyBase.PreExecute()

    MaximumKey = Me.Variables.SPIParentID ' Read the initial value of the variable

End Sub

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

    ' NextKey will always be zero when we start the package.
    ' This will set up the counter accordingly
    If (NextKey = 0) Then
        ' Use MaximumKey +1 here because we already have data
        ' and we need to start with the next available key
        NextKey = MaximumKey + 1
    Else
        ' Use NextKey +1 here because we are now relying on
        ' our counter within this script task.
        NextKey = NextKey + 1
    End If

    'Row.pkAAAParentID = NextKey ' Assign NextKey to our ClientKey field on our data row
    Me.Variables.SPIParentID = NextKey
End Sub

Public Overrides Sub PostExecute()

    MyBase.PostExecute()

    Me.Variables.SPIParentID = MaximumKey ' Save the latest value into the variable

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...