Компонент сценария SSIS записать в переменную

это с SQL 2005.

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

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

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

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
    Inherits UserComponent
    Dim updateSQL As String

    Public Sub Main()
        Dim vars As IDTSVariables90

        VariableDispenser.LockOneForWrite("SQL_ATTR_Update", vars)
        vars("SQL_ATTR_Update").Value = "Test"
        vars.Unlock()
    End Sub


    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        'updateSQL = Row.ITMID + Row.PRCCAT
    End Sub

End Class

Я также пробовал без везения:

Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test" 

3 ответов


Я понял.

от MS:

в коде компонента скрипта используется типизированные свойства доступа для доступа некоторые функции пакета, такие как переменные и менеджеры соединений.

preexecute метод может получить доступ только переменные только для чтения. В PostExecute способ может доступ только для чтения и переменные чтения/записи.

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

http://msdn.microsoft.com/en-us/library/ms136031.aspx

похоже, что Dts доступен только в задаче скрипта.

вот как выглядит код:

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
    Inherits UserComponent
    Dim updateSQL As String


    Public Overrides Sub PostExecute()
        Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test"
    End Sub

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        'updateSQL = Row.ITMID + Row.PRCCAT
    End Sub

End Class

вот как вы могли бы сделать это: http://microsoft-ssis.blogspot.com/2011/01/how-to-use-variables-in-script.html


использовать

Dts.Variables("SQL_ATTR_Update").Value = "Test"

и SQL_ATTR_Update должны быть глобальной переменной и перечислены в ваших ReadWriteVariables для этой задачи скрипта.