这是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"
答案 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中。