Компонент сценария 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 для этой задачи скрипта.