我有一个OLEDB(SQL)数据流源(A),它从存储过程中提取结果集并将结果抛出到OLEDB(Oracle)数据流目标(B)。
有没有办法在数据流任务中捕获数据集中的聚合值到变量?具体来说,我想从整个数据集中捕获MAX(<DateValue>)
。
否则,我必须在不同的数据流任务中两次提取相同的数据,无论我指向A还是指向新位置B。
编辑:我已经知道如何在执行SQL任务的控制流中执行此操作。我问,因为我很想知道我是否可以在数据流任务中完成这项任务,因为我已经在那里收集了数据。有没有办法在数据流中获取聚合值?
答案 0 :(得分:5)
这样做的一种方法是在源和目标之间添加一个多播转换,也可以将其转换为脚本组件。
虽然聚合变换也可以工作,但这种方法可以避免添加阻塞变换
将脚本组件配置为目标,为其赋予对变量的读/写访问权限,然后将脚本编辑为
//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)
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)
从此处开始,您的所需结果将在变量中提供。