代码之家  ›  专栏  ›  技术社区  ›  Cᴏʀʏ bcherry

通过将公共“日期”字段与SSIS匹配,将单个源行复制到多个目标行

  •  0
  • Cᴏʀʏ bcherry  · 技术社区  · 15 年前

    场景是这样的:我是一个SSIS处女,但我找到了一个开始玩它的借口。我有一个以下格式的Excel源数据集,每行代表一个月(该月的最后一天):

    [Date]       [Value]
    4/30/2008    3.38
    5/31/2008    3.65
    6/30/2008    3.97
    ...
    

    我的目的地是一个表,该表中的每一天都有一行,其中[值]列是我的空列,我需要用Excel文档中的值填充:

    [Date]       [Value]   [Other columns with distinct data]
    4/01/2008    NULL      .....
    4/01/2008    NULL
    4/01/2008    NULL
    4/02/2008    NULL
    4/02/2008    NULL
    4/02/2008    NULL
    4/03/2008    NULL
    4/03/2008    NULL
    4/03/2008    NULL
    ...
    

    我需要在Excel文档中为目标表中相应月份值的每一天复制每个月的单个值,以便上一个表最终看起来像:

    [Date]       [Value]
    4/01/2008    3.38
    4/01/2008    3.38
    4/01/2008    3.38
    4/02/2008    3.38
    4/02/2008    3.38
    4/02/2008    3.38
    4/03/2008    3.38
    4/03/2008    3.38
    4/03/2008    3.38
    ...
    

    您可能在想“为什么要跨行复制值?”,但这只是对数据的回填——未来的条目是使用Web应用程序进行的,该应用程序可以批量保存这些条目,但可以手动调整或编辑单个日条目。

    所以,我的问题是:在我的SSIS包中,Excel源和SQL Server目标之间可能存在哪些组件?我知道我需要完成什么:

    • 对于目标数据集中的每个日期,我希望在Excel源中查找其日期列中匹配的月份,并找到相应的值
    • 接下来,我需要将Excel值插入到我的SQL Server目标的值列中。
    • 然后重复…

    使用SSIS是否值得?这是一次演出,但正如我所说,我认为这将是一个涉足SSIS的好机会。同时,我可能会在Excel中创建一个快速宏来为我生成一些更新语句。

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  0
  •   shahkalpesh    15 年前

    将Excel工作表的内容放入SQL数据库的临时表中(临时表:ExcelData)。

    然后写一个更新语句

    UPDATE mainTable, #excelData
    SET mainTable.Value = #excelData.Value
    WHERE datepart(yy, mainTable.Date) = datepart(yy, #excelData.Value)  
    and datepart(mm, mainTable.Date) = datepart(mm, #excelData.Value)