在脚本组件Input0_ProcessInputRow中,我试图获取"ReadWrite“全局变量值,但它抛出了下面的错误。
错误:
在PostExecute之外,不能使用为读写访问而锁定的变量集合
。
下面是我的代码
If Row.Column13 = "C" Then
Variables.mTotalCreditCount = Variables.mTotalCreditCount - 1
Variables.mTotalCreditAmount = Variables.mTotalCreditAmount - CDbl(Row.Column14)
ElseIf Row.Column13 = "D" Then
Variables.mTotalDebitCount = Variables.mTotalDebitCount - 1
Variables.mTotalDebitAmount = Variables.mTotalDebitAmount - CDbl(Row.Column14)
End If
我还尝试读取局部变量中的值,然后在PostExecute()中将其赋值给全局变量,如下所示。不走运
If Row.Column13 = "C" Then
mTotalCrCnt = Variables.mTotalCreditCount - 1
mTotalCrAmt = Variables.mTotalCreditAmount - CDbl(Row.Column14)
ElseIf Row.Column13 = "D" Then
mTotalDbCnt = Variables.mTotalDebitCount
mTotalDbCnt = mTotalDbCnt - 1
mTotalDbAmt = Variables.mTotalDebitAmount
mTotalDbAmt = mTotalDbAmt - CDbl(Row.Column14)
End If
Public Overrides Sub PostExecute()
MyBase.PostExecute()
Variables.ProcessCount = intProcessCount
Variables.mTotalCreditCount = mTotalCrCnt
Variables.mTotalCreditAmount = mTotalCrAmt
Variables.mTotalDebitCount = mTotalDbCnt
Variables.mTotalDebitAmount = mTotalDbAmt
End Sub
有什么需要帮忙的吗?
发布于 2017-03-13 05:04:48
从您的评论来看,您似乎已经解决了这个问题,但我发布此答案是为了提供有关如何在SSIS脚本中使用变量以及如何解决类似问题的信息,以便对其他用户有所帮助
SSIS变量
变量存储可在所有SSIS组件和容器中使用的值。
集成服务支持两种类型的变量:用户定义变量和系统变量。用户定义的变量由包开发人员定义,系统变量由Integration Services定义。可以根据包的需要创建任意数量的用户定义变量,但不能创建其他系统变量。
在脚本组件中使用变量
每个脚本都有一个可以在脚本页面上定义的ReadOnlyVariables
和ReadWriteVariables
列表。
ReadOnlyVariables
可以从所有脚本子访问ReadOnlyVariables
,并且它们被命名为Read-Only
。
ReadWriteVariables
ReadWriteVariables集合仅在
PostExecute
方法中可用,以最大限度地提高性能并最小化锁定冲突的风险。因此,您不能在处理每一行数据时直接递增包变量的值。改为递增局部变量的值,并在处理完所有数据后将包变量的值设置为PostExecute方法中的局部变量的值。您还可以使用VariableDispenser属性来解决此限制。但是,在处理每一行时直接写入包变量将对性能产生负面影响,并增加锁定冲突的风险。
使用变量的方法
有3种处理变量的方法:
LockForRead
和LockForWrite
方法)在脚本页面ReadOnlyVariables
或ReadWriteVariables
后直接访问它们IDTSVariables100 vars = null;VariableDispenser.LockForRead("User::MyVariable");VariableDispenser.GetVariables(out vars);string TaskName = vars"User::MyVariable".Value.ToString();vars.Unlock();
中
有很多文章都在讨论这种方法,您可以参考它们来了解更多信息
https://stackoverflow.com/questions/42687860
复制相似问题