将聚合值从数据流任务捕获到变量中

时间:2014-05-29 22:13:13

标签: sql-server ssis bids

我有一个OLEDB(SQL)数据流源(A),它从存储过程中提取结果集并将结果抛出到OLEDB(Oracle)数据流目标(B)。

有没有办法在数据流任务中捕获数据集中的聚合值到变量?具体来说,我想从整个数据集中捕获MAX(<DateValue>)

dataflowwithcapture

否则,我必须在不同的数据流任务中两次提取相同的数据,无论我指向A还是指向新位置B。

编辑:我已经知道如何在执行SQL任务的控制流中执行此操作。我问,因为我很想知道我是否可以在数据流任务中完成这项任务,因为我已经在那里收集了数据。有没有办法在数据流中获取聚合值?

2 个答案:

答案 0 :(得分:5)

这样做的一种方法是在源和目标之间添加一个多播转换,也可以将其转换为脚本组件。

虽然聚合变换也可以工作,但这种方法可以避免添加阻塞变换

enter image description here

将脚本组件配置为目标,为其赋予对变量的读/写访问权限,然后将脚本编辑为

//Instance level variable
DateTime? maxDate = null;

public override void PostExecute()
{
    base.PostExecute();

    if (maxDate.HasValue)
    {
        this.Variables.MaxDate = maxDate.Value;
    }

    System.Windows.Forms.MessageBox.Show(this.Variables.MaxDate.ToString());
}


public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (!Row.createdate_IsNull)
    {
        maxDate = Row.createdate < maxDate ? maxDate : Row.createdate;
    }
}

答案 1 :(得分:0)

  • 在控制流程中保持当前的DFT(源到目标映射本身)
  • 在控制流程中,添加一个Exceute SQL任务,使用相同的源查询并在其上应用所需的MAX()函数。

enter image description here

Eg: 
--Let the given be Your source query.
SELECT  ColumnA,
        ColumnB,
        ColumnC,
        DateValue
FROM    SourceA

--Your new query to calculate MAX() may be this.
SELECT  MAX(DateValue)
FROM    SourceA

在执行SQL任务中提供第二个SQL。 在包中添加类型为int的变量,在包级别范围内。 (例如:name = intMax)

In the Execute SQL task, not the following.
    a.general Tab
        Result Set  = Single Row
        Sql Statement = SELECT  MAX(DateValue) FROM SourceA
    b.result set Tab
        click ADD
        ResultName = 0
        variable Name = variable Name (eg: name = intMax)

enter image description here

从此处开始,您的所需结果将在变量中提供。