SSIS脚本组件写入变量

Max*_*eek 7 ssis sql-server-2005

这是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
Run Code Online (Sandbox Code Playgroud)

我也试过没有运气:

Me.ReadWriteVariables("SQL_ATTR_Update").Value = "Test" 
Run Code Online (Sandbox Code Playgroud)

Max*_*eek 7

我想到了.

来自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
Run Code Online (Sandbox Code Playgroud)