SSIS脚本组件写入变量

时间:2010-02-17 21:39:15

标签: sql-server-2005 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 个答案:

答案 0 :(得分:7)

我明白了。

来自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

答案 1 :(得分:4)

答案 2 :(得分:1)

使用

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

SQL_ATTR_Update需要是一个全局变量,并列在该脚本任务的ReadWriteVariables中。