Это - с 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"
Я разобрался.
Из MS:
В коде компонента сценария вы используете типизированные свойства средства доступа для доступа к определенным функциям пакета, таким как переменные и диспетчеры соединений.
Метод PreExecute может обращаться только к переменным, доступным только для чтения. Метод PostExecute может обращаться как к переменным только для чтения, так и к переменным для чтения / записи.
Для получения дополнительной информации об этих методах см. Кодирование и отладка компонента скрипта .
http://msdn.microsoft.com/en-us/library/ms136031.aspx
Похоже, что Dts доступен только в Script Task.
Вот как выглядит код:
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
Используйте
Dts.Variables("SQL_ATTR_Update").Value = "Test"
И SQL_ATTR_Update должен быть глобальной переменной и должен быть указан в ваших ReadWriteVariables для этой задачи сценария.