Excel 将多列值源到 ssis 2012 中的 oledb 目标单列

Excel source multiple column values to oledb destination single column in ssis 2012

Excel sheet 有 4 列,每列填充数据直到 500 行。我想将那些 excel 数据插入单列 (PolicyIds) 并使用 oledb 目标。在 excel 源中,我没有任何列 header。谁能建议我如何有效地做到这一点。 (也许我可以使用脚本任务来获取数据范围并将其用作 SQL 变量)。有什么好的方法吗

样本excel

A.......B.......C......D

1001 1005 1009 1013

1002 1006 1010 1014

1003 1007 1011 1015

1004 1008 1012 1016

不确定最佳做法,但您可以这样做(我猜您知道,不详细介绍):

假设您在数据库中有这个 table:

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. 您将重新创建或截断暂存 table:TRUNCATE TABLE tblFourToOne_staging
  2. 接下来您将读取数据并将其插入暂存中table
  3. 将暂存数据复制到原始数据table:

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

假设总是有 4 列,并且您不必动态检测它们,您可以使用多播将 excel 输出拆分为 4 个管道,使用 4 个排序转换(每列一个,重命名他们 uniformely),然后用 Union All 收集管道。查看屏幕截图。

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

In excel source select 数据访问方式为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

这里我的sheet名字是CA.If你有列名你可以提到你的列名而不是F1,F2等,

并且 Sql 命令比默认 table 或查看选项更快。

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