使用非连续范围从Excel导入SQL?

时间:2011-04-09 19:38:55

标签: sql sql-server excel sql-server-2008

我有一些Excel电子表格,我无法更改,因为它们被其他部门使用,他们将来也不会更改它们。它们是.xlsm,有超过500列(A:TH)。我试图在64位机器上将它们导入SQL server 2008,但我遇到了很多问题。所有形式的Excel导入似乎都会将我选择的列截断为前255个。

最终将有5个单独的表来存储此数据和1个公共密钥。我可以编写一个简短的VBA脚本来将Excel中的数据排序到源的排列表中,但我想先询问是否可以使用以下内容...

这很好,并选择A:IV

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                         'Excel 12.0;Database=C:\NEW.xlsm',
                         'SELECT * FROM [Details Sheet$A:IV]')

是否有一种聪明的方法可以使用非连续范围执行类似的操作,例如

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                         'Excel 12.0;Database=C:\NEW.xlsm',
                         'SELECT * FROM [Details Sheet$C:C,IW:LZ]')

即。拿起C列中的键和附加列IW:LZ?对我来说问题是使用全范围C:LZ和SELECT [ID],[THIS],[THAT] FROM等对于范围内超过255列的字段不起作用,非常烦人!

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用SSIS导入Excel文件?它可能对数据类型非常挑剔,但我从来没有遇到过一些限制,我无法解决一些脚本组件。

它旨在成为一个高性能的ETL工具,用于完成您正在尝试完成的工作。如果您是新手,请查看importing the entirety of Wikipedia as XML上的这篇文章到多个表格中。

快速说明您可能需要安装其他Office驱动程序才能读取Excel 2007格式,尤其是在64位计算机上。