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)
我想到了.
来自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)