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

标签 sql-server oledb

我的 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”不包含表“Page1-2$”。该表不存在或当前用户没有该表的权限。'

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

谷歌搜索给我提供了使用 Jet 提供商的结果,但这对我来说没有好处。

谢谢!

最佳答案

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

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

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

关于sql-server - SQL - OPENDATASOURCE - 名称中带有连字符的 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026408/

相关文章:

asp.net - 带有使用 Windows 身份验证和模拟的 Web 应用程序的 IIS

java - 在 Java 应用程序中执行 "sp_msforeachdb"

C#读取excel文件忽略第一行

sql-server-2008 - 动态 CREATE TABLE 命令仅创建 "general"列数据类型(Excel 连接)

c# - Microsoft.ACE.OLEDB.12.0 CSV 连接字符串

c# - 来自外部应用程序的 Access 数据库中日期字段的月份名称 (C#)

c# - 无法删除数据库,因为它当前正在使用中

sql - 为什么我不能在此查询中进行任何类型的连接?

sql - 填补稀疏数据中的日期空白

c# - OleDbDataAdapter 偶尔丢失记录