【问题标题】:How to store a column value into a variable in Data Flow Task?如何将列值存储到数据流任务中的变量中?
【发布时间】:2019-01-22 11:47:51
【问题描述】:

我有 DFT,我从表中提取 URL,我需要将该值存储到变量中。

我正在使用 OLEDB Source 连接到 My SQL Server 并选择所需的列。 然后我有条件拆分,它将为我拆分正确的 URL。 来自我已映射到脚本组件的条件拆分的正确 URL 流。

下面是我用过的C#代码:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    this.ReadWriteVariables["User::NextPageLink"].Value = Row.href;
}

但是当我尝试执行时,出现以下错误:

[脚本组件 [116]] 错误:Microsoft.SqlServer.Dts.Pipeline.ReadWriteVariablesNotAvailableException:为读写访问锁定的变量集合在 PostExecute 之外不可用。 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(异常 e) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer 缓冲区) 在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 包装器,Int32 inputID,IDTSBuffer100 pDTSBuffer,IntPtr bufferWirePacket)

【问题讨论】:

  • ReadWriteVariable 权限似乎存在问题。您是否将变量添加到脚本转换编辑器中的“ReadWriteVariables”字段?

标签: c# sql-server vb.net ssis ssis-2012


【解决方案1】:

在脚本组件中,变量只能在PostExecute 方法中写入,而不是ProcessInputRow 方法。要使用列中的值更新变量,请在这些方法之外声明一个变量,更新 ProcessInputRow 中的变量,然后将此值分配给 PostExecute 方法中的 SSIS 变量。当然,在脚本组件的ReadWriteVariables 字段中添加 SSIS 变量。您可能知道,ProcessInputRow 方法对每一行调用一次,而 PostExecute 仅在所有记录处理完毕后才执行,因此如果您需要对多行中的值执行某些操作,您需要执行ProcessInputRow 方法中的这个逻辑。请注意,对通过此组件的每条记录执行您正在执行的任何操作都会带来额外的开销。

string nextPageLink = null;

public override void PostExecute()
{
    base.PostExecute();
    Variables.NextPageLink = nextPageLink;  
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    nextPageLink = Row.href;
}

【讨论】:

  • 感谢您的回答。
【解决方案2】:

谢谢,@userfl89。 我的编码与你的类似,但我使用了 VariableDispenser。这里真的需要吗?

public override void PostExecute()
{
    base.PostExecute();
    VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
    variableDispenser.LockForWrite("User::NextPageLink");
    this.ReadWriteVariables["User::NextPageLink"].Value = nextpagelink;

 }

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    nextpagelink = Row.href;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多