我有一个 excel 2007 文件,大约有 301808 行和 2 列。我试图使用 SSIS 导入但不能使用 2007 excel。然后我决定尝试在 SQL Server 中创建一个链接服务器,按照此处的说明进行操作:
- 在 SQL Server Management Studio 中,展开对象资源管理器中的服务器对象。
- 右键单击链接服务器,然后单击新建链接服务器。
- 在左侧窗格中,选择“常规”页面,然后执行以下步骤:
- 在第一个文本框中,键入链接服务器的任何名称。
- 选择其他数据源选项。
- 在提供程序列表中,单击 Microsoft Jet 4.0 OLE DB 提供程序。
- 在产品名称框中,键入 Excel 作为 OLE DB 数据源的名称。
- 在数据源框中,键入 Excel 文件的完整路径和文件名。
- 在提供程序字符串框中,为 Excel 2002、Excel 2000 或 Excel 97 - 工作簿键入 Excel 8.0。
- 单击确定以创建新的链接服务器。
从这里: http: //support.microsoft.com/kb/306397/EN-US
但是,说明仅涵盖以前的 excel 文件而不是 2007,因此我查找了 2007 的连接字符串,并在链接服务器的设置中使用 Excel 12.0 而不是 Excel 8.0:
- 提供者:Microsoft Office 12.0 Access 数据库引擎 OLE DB
- 提供者产品名称:Excel 数据源:C:\Documents and
- Settings\UserName\Desktop\Main\FilesIns\MyExcelFile.xlsx 提供程序
- 字符串:Excel 12.0
- 地点:
- 目录:
然后我得到了这个错误:
链接服务器“EXCEL_MY_FILE”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不包含表“报表 1$”。该表不存在或当前用户对该表没有权限。
我进入安全性并添加了 nt authority\system 以防万一它是权限问题,它仍然给了我上面的错误。
该 Excel 表称为“报告 1”。
我还尝试在 sql 中使用 openrowset 来查看发生了什么,我得到了这个:
SQL Server 阻止了对组件“即席分布式查询”的声明“OpenRowset/OpenDatasource”的访问,因为该组件作为该服务器安全配置的一部分被关闭。
然后我尝试了下面链接中的代码,看看它是否有助于我使用 openrowset:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
并得到:
链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“FROM 子句中的语法错误。”。消息 7321,级别 16,状态 2,第 1 行准备查询“Select * from C:\Documents and Settings\UserName\Desktop\Main\FilesIns\MyExcelFile.xlsx”以针对 OLE DB 提供程序“Microsoft. ACE.OLEDB.12.0" 用于链接服务器 "(null)"。
所以我不确定我的 openrowset 语句中的值是否正确。
真的只是在寻找一种不使用 SSIS 将这个文件导入 sql 表的方法——无论如何我都不能使用它。
谢谢
安德鲁