【问题标题】:Script component Fail: System.IndexOutOfRangeException: Index was outside the bounds of the array脚本组件失败:System.IndexOutOfRangeException:索引超出了数组的范围
【发布时间】:2015-01-23 06:22:42
【问题描述】:

在 SSIS 包中,“脚本组件”由于以下异常而失败。此异常仅有时会发生。该脚本组件包含 Try/Catch,但仍然失败。此异常的原因可能是什么?

错误信息


5246793 User:OnError Package1 2015-01-16 03:40:45.000 2015-01-16 03:40:45.000 00:00:00 System.IndexOutOfRangeException: Index was outside the bounds of the array.

   at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)

   at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer buffer)

   at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 wrapper, Int32 inputID, IDTSBuffer100 pDTSBuffer, IntPtr bufferWirePacket)

5246800 OnError Package1 2015-01-16 03:40:45.000 2015-01-16 03:40:45.000 00:00:00 SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "Script Component" (657) failed with error code 0x80131508 while processing input

input "Input 0" (666). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.

【问题讨论】:

    标签: sql-server-2008 ssis business-intelligence script-component msbi


    【解决方案1】:

    复制是我的问题。就我而言,我有超过 50 个输出列,因此重新创建脚本组件不是一个好的选择。我最终在 VSCODE 中打开了 DTSX 文件(在右侧滚动条上有很好的突出显示)。每个组件的 GUID/程序集名称被阻止为每个组件出现 18 次。因此,对于副本,我有 36 次出现相同的 GUID。它们被充分分开以识别每个组件,并且刚刚创建了一个新的 guid 并为其中一个替换了 18 个,并且错误得到了解决。希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      该错误与脚本任务的输入列有关,您可以在脚本转换编辑器的第二个选项卡上找到该输入列。也许它期待一个不再存在的列,或者您正在使用脚本中尚未选择的列。

      如果您仍然无法确定问题,请尝试刷新组件的元数据,或将其删除并重新创建。

      【讨论】:

        【解决方案3】:

        在某些 ETL 数据流中遇到了同样的问题:同一脚本任务的多个实例有时工作,有时不工作,在管道缓冲区上显示相同的“索引越界”错误。 通过删除从现有实例复制的实例并从头开始生成新任务来解决,只需复制脚本本身即可。也许在复制这些内容时出现问题,跨越缓冲区? 希望对你有帮助...

        【讨论】:

          【解决方案4】:

          @Oliver 的回答在这里最接近真相。这一步确实可以解决问题,我也经历过。 典型的我们心爱的 Stack Overflow,正确答案的评分为零。

          当脚本组件尝试访问 Dts.Variables 集合时,您也可能会间歇性地从 SSIS 获取此信息,但未在脚本的“ReadOnlyVariables”或“ReadWriteVariables”参数中选择该变量。 检查使用的索引是否正确且格式正确,例如

          用户::变量名

          【讨论】:

            【解决方案5】:

            @Oliver 的答案是正确的,只需删除并重新创建 SCRIPT 组件,似乎复制/粘贴现有​​脚本组件会导致此错误。

            【讨论】:

            • 欢迎来到 SO :) 如果唯一的目的是同意现有答案,则无需添加新答案。只需投票您喜欢的答案(以及问题!)。
            【解决方案6】:

            我在使用第三方组件时遇到了这个错误。为了解决这个问题,我不得不将我设置的 DefaultBufferMaxRows 属性的值减小为 10,000,000,然后我转到 10,000 并解决了它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-01-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-11-14
              • 1970-01-01
              相关资源
              最近更新 更多