首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRowset Excel读取顺序

OpenRowset Excel读取顺序
EN

Stack Overflow用户
提问于 2015-05-07 08:13:43
回答 1查看 1.4K关注 0票数 1

我正在使用MS 2012来读取Excel表格(excel 2010)。excel工作表可能有可变的列数和可变架构,其范围从100到1000多个不等。我需要将每条记录读入临时表,然后将其规范化。我从使用OpenRowset开始

代码语言:javascript
复制
> Insert into #temp FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
>     'Excel 12.0;HDR=YES;Database=c:\dir\test.xlsx',
>     'SELECT * FROM [sheet1$]');

我很快意识到,这种方法允许我一次阅读的最大列数是255。一些快速研究指责这是驱动程序Microsoft.ACE.OLEDB.12.0的局限性。因此,当我有大量列(> 255)的excel文件时,这种方法就失败了。除了加载之外,单个表中的列可能会造成另一个问题,即超过表的8060页大小限制。因此,我改变了我的方法,并决定进行多次读取并循环openrowset命令,以便它一次读取200列并将其加载到临时表中。我可以通过将excel列范围附加到工作表名 sheet 1$A:GR来指定范围,命令如下所示

代码语言:javascript
复制
> Insert into #temp01 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
>     'Excel 12.0;HDR=YES;Database=c:\dir\test.xlsx',
>     'SELECT * FROM [sheet1$A:GR]');

一旦我将其放入适当的循环中,我就能够读取整个excel表,并创建几个临时表,这些表放在一起将给出所有列。为了将这些临时表放在一起以获得一个完整的记录,我打算使用一个连接,也许是一个视图,这里是我遇到问题的地方。

  • OpenRowset是否会保持读取顺序,以便excel中的记录1在我创建的所有临时表中为所有其他记录记录1?
  • 如果保持顺序,我可以简单地在SQL行号上加入,如果不是,我应该怎么做呢?

感谢在这方面的任何帮助/建议。

EN

回答 1

Stack Overflow用户

发布于 2015-05-07 11:51:34

表中的行的“顺序”没有真正的概念。除非在select中添加order子句,否则不能保证select将显示结果。

也就是说,如果没有ORDER,简单的select通常会使行按照它们被添加的顺序返回,但是有太多的事情要做,所以根本无法保证。

最好的方法是在每个临时表中添加一个int列,称为例如Row。将源数据的Excel行号放入其中,然后可以识别每一位数据来自的行,并将跨临时表的数据与源excel行相匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30095410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档