首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在SSIS的脚本组件中获取"ReadWrite“变量值

无法在SSIS的脚本组件中获取"ReadWrite“变量值
EN

Stack Overflow用户
提问于 2017-03-09 14:01:11
回答 1查看 6.7K关注 0票数 7

在脚本组件Input0_ProcessInputRow中,我试图获取"ReadWrite“全局变量值,但它抛出了下面的错误。

错误:

在PostExecute之外,不能使用为读写访问而锁定的变量集合

下面是我的代码

代码语言:javascript
复制
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()中将其赋值给全局变量,如下所示。不走运

代码语言:javascript
复制
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

有什么需要帮忙的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-13 05:04:48

从您的评论来看,您似乎已经解决了这个问题,但我发布此答案是为了提供有关如何在SSIS脚本中使用变量以及如何解决类似问题的信息,以便对其他用户有所帮助

SSIS变量

变量存储可在所有SSIS组件和容器中使用的值。

集成服务支持两种类型的变量:用户定义变量和系统变量。用户定义的变量由包开发人员定义,系统变量由Integration Services定义。可以根据包的需要创建任意数量的用户定义变量,但不能创建其他系统变量。

在脚本组件中使用变量

每个脚本都有一个可以在脚本页面上定义的ReadOnlyVariablesReadWriteVariables列表。

ReadOnlyVariables

可以从所有脚本子访问ReadOnlyVariables,并且它们被命名为Read-Only

ReadWriteVariables

ReadWriteVariables集合仅在PostExecute方法中可用,以最大限度地提高性能并最小化锁定冲突的风险。因此,您不能在处理每一行数据时直接递增包变量的值。改为递增局部变量的值,并在处理完所有数据后将包变量的值设置为PostExecute方法中的局部变量的值。您还可以使用VariableDispenser属性来解决此限制。但是,在处理每一行时直接写入包变量将对性能产生负面影响,并增加锁定冲突的风险。

使用变量的方法

有3种处理变量的方法:

  1. 使用变量分配器(LockForReadLockForWrite方法)在脚本页面
  2. 中将它们选择为ReadOnlyVariablesReadWriteVariables后直接访问它们

IDTSVariables100 vars = null;VariableDispenser.LockForRead("User::MyVariable");VariableDispenser.GetVariables(out vars);string TaskName = vars"User::MyVariable".Value.ToString();vars.Unlock();

  • Using SSIS日志记录任务:读取变量并将其记录到执行日志、消息框或文件

有很多文章都在讨论这种方法,您可以参考它们来了解更多信息

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42687860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档