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
答案 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
TRUNCATE TABLE tblFourToOne_staging
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
答案 1 :(得分:2)
假设总有4列,并且您不必动态检测它们,您可以使用Multicast将Excel输出拆分为4个管道,使用4个排序转换(每列一个,将它们统一重命名),然后用Union All收集管道。请参阅屏幕截图。
答案 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目的地而无需任何多播和排序等,干杯!