如何拆分源表记录是SSIS

时间:2018-03-08 14:11:54

标签: sql-server ssis etl sql-server-data-tools

下面给出了包含数据的源表和目标表结构。源表有事务类型列,基于此列的目标表行将被定义。假设:源表数据是 enter image description here

在第一行SalesTranId = 1和TranType =每月,因为这是一个月度事务目标表,将填充30行,值为500/30 = 16.6,如下所示

enter image description here

当Source TranType = Yearly时,目标表必须具有基于源表行的365行。 如何在SSIS包中做到这一点。

来源表:

enter image description here

目标表:

enter image description here

SSIS包:

enter image description here

2 个答案:

答案 0 :(得分:2)

我同意Tab和Nick的观点,但你坚持在SSIS中这样做。

你必须做出一些假设才能使我的逻辑工作:

每月翻译为30,每季度翻译为90,每年翻译为365。

  1. 导入您的来源。

  2. 添加脚本组件并创建目的地的第二个输出。

  3. 添加以下代码:
  4. //Determine Divisor
    int DIV = 0;
    
    switch(Row.TranType.ToLower())
    {
        case "monthly":
           DIV=30;
           break;
        case "quarterly":
           DIV=90;
           break;
        case "yearly":
           DIV=365;
           break;
    }
    
    for (int i = 1; i<=DIV;i++)
    {
       destBuffer.AddRow();
       destBuffer.SalesTranID = Row.SalesTransID;
       destBuffer.TranType = Row.TranType;
       destBuffer.TranAmt = Row.TranAmt/DIV;
    }
    

答案 1 :(得分:1)

如果必须在数据流中执行此操作,则需要使用脚本组件。

我个人会按原样将数据发送到临时表,并在将存储过程从登台表移动到最终目标表时进行拆分。它会表现得更快。