Excel在ssis 2012中为oledb目标单列提供多个列值

时间:2015-01-02 09:19:43

标签: ssis bids ssis-2012

Excel工作表有4列,每列填充数据500行。我想将这些excel数据插入单列(PolicyIds)并使用oledb目标。在excel souce中,我没有任何列标题。任何人都可以建议我如何有效地做到这一点。 (可能我可以使用脚本任务来获取数据范围并将其用作SQL变量)。有没有最好的方法。

示例excel

一个.......乙......... C ...... d

1001 1005 1009 1013

1002 1006 1010 1014

1003 1007 1011 1015

1004 1008 1012 1016

3 个答案:

答案 0 :(得分:2)

不确定最佳做法,但你可以这样做(不会详细说明我猜你知道):

假设您在数据库中有这些表:

CREATE TABLE tblFourToOne (PolicyIds INT); --Original, where all your data are

CREATE TABLE tblFourToOne_staging (F1 INT,F2 INT,F3 INT,F4 INT); --temp table to insert data I am using this column names as SSIS gave those as default
  1. 您将重新创建或截断临时表:TRUNCATE TABLE tblFourToOne_staging
  2. 接下来,您将读取数据并将其插入临时表
  3. 将数据从登台复制到原始表:
  4. INSERT INTO tblFourToOne
    SELECT F1
    FROM tblFourToOne_staging
    UNION ALL
    SELECT F2
    FROM tblFourToOne_staging
    UNION ALL
    SELECT F3
    FROM tblFourToOne_staging
    UNION ALL
    SELECT F4
    FROM tblFourToOne_staging
    

    main control flow

    inner data flow

答案 1 :(得分:2)

假设总有4列,并且您不必动态检测它们,您可以使用Multicast将Excel输出拆分为4个管道,使用4个排序转换(每列一个,将它们统一重命名),然后用Union All收集管道。请参阅屏幕截图。

enter image description here enter image description here enter image description here

答案 2 :(得分:0)

上述答案可能正常,但我找到了一些简化的方法。

在excel源中选择数据访问模式为SQL命令或SQL命令变量(用于动态查询) 然后在下面输入查询以将所有列连接到单列。

select F1 from [CA$] where F1 is not null
union all
select F2 from [CA$] where F2 is not null
union all
select F3 from [CA$] where F3 is not null
union all
select F4 from [CA$] where F4 is not null

这里我的工作表名称是CA.If你有列名,你可以提到你的列名而不是F1,F2等。

Sql命令比默认表或视图选项更快。

现在我可以直接连接到oledb目的地而无需任何多播和排序等,干杯!