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

Прежде чем дать себе какой-то стресс, связанный с сердечным приступом.

Кто-нибудь знает, как выполнить, казалось бы, просто задачу установки набора результатов одной задачи потока данных (результат будет либо 0, либо 1) и присвоение этого значения переменной.

Я создал переменную ok.

Результирующий набор исходит из XML файла с несколькими элементами. Флаг (0 или 1) является результатом одного из этих элементов, поэтому мне также нужно знать, как получить набор результатов только этим флагом.

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

Обновление: я в итоге прочитал результат (0,1) обратно на SQL Server в таблицу флагов. Затем используется Execute SQL script, чтобы прочитать его обратно с SQL Server и переменной. Не уверен, что это лучший способ сделать это, но, похоже, это трюк.

Ответ 1

Вы можете использовать компонент потока данных Script для переноса значения столбца потока данных в переменную SSIS. Тем не менее, вы должны следовать определенным правилам при работе с компонентом потока данных Script и переменными SSIS.

SSIS не позволяет присваивать значения переменным SSIS в процедуре Script, которая обрабатывает строки. Но есть процедуры до и после выполнения, где вы можете обрабатывать задание.

В вашем компоненте Script добавьте переменную SSIS в свойство ReadWriteVariables. Измените Script и объявите переменную в классе ScriptMain. Используйте процедуру PreExecute для инициализации переменной. Используйте процедуру ProcessInputRow, чтобы назначить значение столбца ввода-буфера для переменной Script. И используйте задачу PostExecute для назначения значения из переменной Script переменной SSIS.

Здесь приведен пример компонента VB Script. Он имеет переменную SSIS (MyOutVariable), которая получит результат переменной Script (MyVar). Переменная MyVar получает значение из столбца MyNumber в потоке данных.

Public Class ScriptMain
    Inherits UserComponent

    Dim MyVar As Integer

    Public Overrides Sub PreExecute()
        MyBase.PreExecute()

        'initialize variable local to data flow
        MyVar = 0

    End Sub

    Public Overrides Sub PostExecute()
        MyBase.PostExecute()

        ' output variable value to SSIS variable
        Me.Variables.MyOutVariable = MyVar

    End Sub

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        ' logic to get value
        MyVar = Row.MyNumber

    End Sub
End Class

Ответ 2

Начиная с SSIS 2012, вы можете легко присвоить переменную значение с помощью Expression Task. Нет необходимости писать Script, о котором большинство из нас опасается, для выполнения, казалось бы, простой задачи установки значения переменной.

Ex: Если у меня есть переменная date с именем Today, и я хочу присвоить ей значение, я могу сделать это легко в Задача выражения, как показано ниже.

введите описание изображения здесь

Дальнейшее чтение: MSDN - Документация по определению выражений SSIS.

ПРИМЕЧАНИЕ: (принятый ответ устарел.)