我用Excel收集&配置数据,然后将其导入SQL Server 2012进行存储。
到目前为止,我一直在使用SQL Server Import&导出向导,但不断手动设置它是一件痛苦的事。由于我使用Express,当然它不允许我保存甚至查看传输数据的实际命令。
我尝试按How to use Excel with SQL Server linked servers and distributed queries设置链接服务器,但收到以下错误:
已创建链接服务器但连接测试失败。您想保留链接服务器吗?
执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
无法初始化OLE DB提供程序的数据源对象" Microsoft.Jet.OLEDB.4.0"对于链接服务器" FLTST"。
OLE DB提供程序" Microsoft.Jet.OLEDB.4.0"对于链接服务器" FLTST"返回消息"未指定错误"。 (Microsoft SQL Server,错误:7303)
我想也许Excel版本号是问题所在,因为网页是从2005开始的,所以我尝试了:
所有这些都给了我相同的结果。
接下来我尝试了分布式查询,如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
这给了我以下错误:
OLE DB提供程序" Microsoft.Jet.OLEDB.4.0"对于链接服务器"(null)"返回消息"未指定错误"。
Msg 7303,Level 16,State 1,Line 3
无法初始化OLE DB提供程序的数据源对象" Microsoft.Jet.OLEDB.4.0"对于链接服务器"(null)"。
而不是去SQL Server&把数据拉进去,我应该留在Excel&推开它?
我做错了什么?
PS:请不要告诉我将其转换为csv文件!我试图做更少的步骤,而不是更多!
答案 0 :(得分:2)
在你的问题中遇到类似的问题,我已经对此做了一些研究。我的问题尚未完全解决,但我想我可能会更进一步。虽然问题很严重,但也许还有其他人需要帮助。
通过运行:
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=P:\Path\File.xlsx','SELECT * FROM [Sheet1$]');
GO
我收到以下错误消息:
Msg 15281,Level 16,State 1,Line 19 SQL Server阻止访问STATEMENT' OpenRowset / OpenDatasource'组件' Ad Hoc Distributed Queries'因为此组件已作为此服务器的安全配置的一部分关闭。系统管理员可以启用“Ad Hoc Distributed Queries”'通过使用sp_configure。有关启用“即时分布式查询”的详细信息,请搜索“即时分布式查询”和“即时分布式查询”。在SQL Server联机丛书中。
要解决此问题,请执行以下操作:
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
但是我得到了一个新的错误信息:
Msg 7302,Level 16,State 1,Line 19 无法创建OLE DB提供程序的实例" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"。
纠正我的行为:
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
但我得到了这个错误:
Msg 7438,Level 16,State 1,Line 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
答案 1 :(得分:0)