【发布时间】:2013-03-15 04:55:27
【问题描述】:
我使用 Excel 收集和配置数据,然后将其导入 SQL Server 2012 进行存储。
到目前为止,我一直在使用 SQL Server 导入和导出向导,但是经常手动设置它很痛苦。由于我使用的是 Express,当然它不允许我保存甚至查看传输数据的实际命令。
我尝试按照How to use Excel with SQL Server linked servers and distributed queries 设置链接服务器,但收到以下错误:
已创建链接服务器,但连接测试失败。您要保留链接服务器吗?
执行 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 文件!我正在尝试更少步骤,而不是更多!
【问题讨论】:
-
“不断手动设置它很痛苦”。这是因为您的 Excel 字段发生了变化,还是因为您不喜欢通过向导?您应该能够保存包并在下次重新运行它......我认为 - 不是 100% 确定 SQL Express。
-
在您的情况下,我可能只是编写一个小的 C# 应用程序,它读取 Excel 并从中获取所需的数据,然后将这些行插入 SQL Server。众所周知,“Jet OleDB”驱动程序很难使用——尤其是在 64 位服务器操作系统上——所以我会尽可能避免使用这些驱动程序
-
如果你的excel文件架构没有变化,只是文件名在变化,那么你可以尝试设置一个动态源的SSIS包来解决你的问题,你不需要经过每次都使用向导,每次更改源时只需更新 SSIS 配置。
标签: tsql sql-server-express sql-server-2012-express