1

我使用 Excel 收集和配置数据,然后将其导入 SQL Server 2012 进行存储。

到目前为止,我一直在使用 SQL Server 导入和导出向导,但不断手动设置它很痛苦。由于我使用的是 Express,当然它不允许我保存甚至查看传输数据的实际命令。

我尝试根据如何将 Excel 与 SQL Server 链接服务器和分布式查询一起使用来设置链接服务器,但出现以下错误:

已创建链接服务器,但连接测试失败。您要保留链接服务器吗?

执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)

无法为链接服务器“FLTST”初始化 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。
链接服务器“FLTST”的 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”返回消息“未指定错误”。(Microsoft SQL Server,错误:7303)

我想也许 Excel 版本号是问题所在,因为网页是 2005 年的,所以我尝试了:

  • Excel 8.0 (Excel 2002) 如页面所示
  • Excel 12.0 (Excel 2007) 这是向导似乎使用的
  • Excel 14.0 (Excel 2010) 我实际拥有的

所有这些都给了我相同的结果。

接下来,我尝试了Import excel file to SQL Server Express中所示的分布式查询(再次使用提供程序字符串的不同变体)

USE ExTest

SELECT * INTO TstTbl FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 14.0;Database=c:\ExTest.xlsm', [Contacts])

go

这给了我以下错误:

链接服务器“(null)”的 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”返回消息“未指定错误”。
消息 7303,级别 16,状态 1,第 3 行
无法初始化链接服务器“(null)”的 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象。

我应该留在 Excel 中并将其推送过来,而不是去 SQL Server 并拉入数据吗?

我究竟做错了什么?

PS:不要告诉我将其转换为csv文件!我正在尝试做更少的步骤,而不是更多!

4

2 回答 2

2

遇到与您的问题类似的问题,我对此进行了一些研究。我的问题还没有完全解决,但我想我可能会让你更进一步。尽管这个问题很老,但也许还有其他人需要帮助。

通过运行:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=P:\Path\File.xlsx','SELECT * FROM [Sheet1$]');
GO

我收到以下错误消息:

消息 15281,级别 16,状态 1,第 19 行 SQL Server 阻止了对组件“即席分布式查询”的声明“OpenRowset/OpenDatasource”的访问,因为该组件作为该服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 启用“即席分布式查询”的使用。有关启用“即席分布式查询”的详细信息,请在 SQL Server 联机丛书中搜索“即席分布式查询”。

为了解决这个问题,我运行以下命令:

sp_configure 'show advanced options', 1  
RECONFIGURE  
GO  
sp_configure 'ad hoc distributed queries', 1  
RECONFIGURE  
GO 

但我收到一条新的错误消息:

消息 7302,级别 16,状态 1,第 19 行无法为链接服务器“(null)”创建 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的实例。

为了纠正我运行:

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

但我得到了这个错误:

消息 7438,级别 16,状态 1,第 19 行 32 位 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”无法在 64 位 SQL Server 的进程中加载​​。

就我而言,我已要求 IT 部门在服务器上安装 64 位版本的 excel,我希望这应该是从 excel 导入时技术问题的结束。

为了事后清理,我禁用了我刚刚启用的设置:

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 0
GO

sp_configure 'ad hoc distributed queries', 0
RECONFIGURE  
GO

sp_configure 'show advanced options', 0  
RECONFIGURE  
GO  
于 2014-07-16T08:40:05.737 回答
0
  1. 使用 Excel 数据源连接管理器创建 SSIS 包,目标是您的 SQL Express,OLE DB 目标
  2. 创建 Excel 连接管理器时,您可以只使用一个现有的 excel 文件
  3. 定义一个用户变量,如user::sourceFile,用于输入excel文件全路径
  4. 创建 Excel 连接管理器后,右键单击-> preperties-> 找到“表达式”,只需将 [User::sourceFile] 给表达式
  5. 只需创建一个从源到目的地的简单数据流
  6. 保存并调试您的 SSIS 包,确保所有凭证都有效并且数据可以流入目标表。注意:不要将敏感数据保存在您的包中,并通过机器密钥进行加密
  7. 每次需要加载新文件时,使用DTEXEC执行打包并覆盖参数

祝你好运

于 2013-03-15T06:09:05.573 回答