【问题标题】:SQL Server SSIS no current rowSQL Server SSIS 没有当前行
【发布时间】:2012-06-11 16:55:06
【问题描述】:

我当前的包包含一个 Excel 源、一个脚本组件和一个 OLE DB 目标。我想要完成的只是改造我的一个专栏。对于这个特定的列,我想要该列的子字符串。但是,我不断收到以下错误消息:

 There is no current row in the buffer. A row may need to be added using the AddRow method.
 at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)

这是什么意思?当我所做的只是转换数据时,为什么我需要添加行?我错过了关于 SSIS 的大局吗?

这是我在脚本中的代码:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        OutBuffer.labortypewbs = Row.CopyofLevel2ProjectSegment.Substring(Row.CopyofLevel2ProjectSegment.Length - 2, 2);
    }

感谢大家的帮助!

【问题讨论】:

  • 你能把你写在脚本组件中的代码贴出来
  • @praveen 我很乐意。
  • 您需要在将值分配给输出列之前添加行。请在语句 outbuffer.labortypewbs=.........之前添加语句 OutBuffer.AddRow() /跨度>
  • 从您所写的内容来看,我认为您可以很好地使用派生列转换并使用 SSIS 附带的 SUBSTRING 函数。如果您想使用该功能,请告诉我们。

标签: sql-server ssis buffer row bids


【解决方案1】:

为什么不使用派生列而不是脚本组件。您可以使用该组件添加一个作为现有列的子字符串的列,而无需编写任何代码或学习脚本组件编程的复杂性。我只会在以下情况下使用脚本组件:

  1. 我有一个案例,没有现有组件可以进行我想要的转换。
  2. 我需要使用的组件不够快或不够准确(有证据)无法使用。

我遇到过一些极端情况,其中脚本组件是最佳解决方案,但它们很少见,而且子字符串不是其中一种情况。

【讨论】:

    【解决方案2】:

    虽然您可以使用派生列来实现这一点,正如 William 所指出的那样,但值得一提的是针对遇到的实际问题的解决方案。

    在设置输出列的值之前,您首先必须添加一个新行。你的代码应该是:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        OutBuffer.AddRow();
        OutBuffer.labortypewbs = Row.CopyofLevel2ProjectSegment.Substring(Row.CopyofLevel2ProjectSegment.Length - 2, 2);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多