SQL - OPENDATASOURCE - 名称中带有连字符的 Excel 工作表

Posted

技术标签:

【中文标题】SQL - OPENDATASOURCE - 名称中带有连字符的 Excel 工作表【英文标题】:SQL - OPENDATASOURCE - Excel Sheet with hyphen in name 【发布时间】:2014-06-03 23:03:42 【问题描述】:

我在 Excel 工作簿中有定期来自第三方的数据源。这些工作表被命名为 Page1-2 和 Page2-2,由于连字符,我无法使用 SQL2008R2 访问它们。将其中一张表重命名为 Sheet1 的工作方式如下:

SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source="D:\MyFiles\MyFile.xlsx"; Extended properties=Excel 12.0' )...Sheet1$

我已经尝试了与另一张纸的各种组合,但没有运气,例如。 [Page2-2]、'Page2-2'、[Page2-2$] 等。我收到错误消息“链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不包含表“第 1-2 $”。该表不存在或当前用户对该表没有权限。'

基本上,我希望这个过程尽可能自动化,所以如果我可以不重命名工作表,我想知道如何访问名称中带有连字符的工作表????

谷歌搜索给我的结果是使用 Jet 提供程序,但这对我没有好处。

谢谢!

【问题讨论】:

我认为您需要OPENDATASOURCE( )...[Page1-2$](即方括号内的美元符号),但我目前无法对此进行测试。 谢谢,但我试过了,但没有成功。 你得到什么错误? 链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不包含表“Page1-2$”。该表不存在或当前用户对该表没有权限。 this 建议在方括号内使用单引号 - 例如['Page1-2$']. 【参考方案1】:

OLEDB 提供程序将 Excel 工作表名称公开为根据工作表命名的表,并附加一个美元符号。某些字符(其中包括空格和连字符)会混淆 OLEDB 驱动程序或 SQL 解析器或两者。要参考您需要的工作表:

OPENDATASOURCE(   )...['Page1-2$']

我怀疑 OLEDB 驱动程序需要单引号,因为连字符,然后 SQL 将需要方括号,因为引号!

【讨论】:

以上是关于SQL - OPENDATASOURCE - 名称中带有连字符的 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章

sql server OpenDataSource查询excel数据

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource&#

SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource&

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource&#

解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource&#