1

我有一个 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 表的方法——无论如何我都不能使用它。

谢谢

安德鲁

4

1 回答 1

0

在您的 sp_Reconfigure 下,看到您在此处引用了一篇文章。但是,我认为您可能需要改为转到 Microsoft 。

http://technet.microsoft.com/en-us/library/ms187569%28v=sql.90%29.aspx

这里有很多关于如何使用 OPENROWSET 的例子——

http://technet.microsoft.com/en-us/library/ms190312%28v=sql.90%29.aspx

于 2013-09-18T06:07:56.513 回答