Tsql 将Excel 2010导入SQL Server
我使用Excel收集和配置数据,然后将其导入SQL Server 2012进行存储Tsql 将Excel 2010导入SQL Server,tsql,sql-server-express,sql-server-2012-express,Tsql,Sql Server Express,Sql Server 2012 Express,我使用Excel收集和配置数据,然后将其导入SQL Server 2012进行存储 到目前为止,我一直在使用SQL Server导入和导出向导,但是经常手动设置它是一件痛苦的事情。由于我使用的是Express,它当然不允许我保存,甚至不允许我查看传输数据的实际命令 我尝试按设置链接服务器,但出现以下错误: 已创建链接服务器,但连接测试失败。是否要保留链接的服务器 执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo) 无法为链
到目前为止,我一直在使用SQL Server导入和导出向导,但是经常手动设置它是一件痛苦的事情。由于我使用的是Express,它当然不允许我保存,甚至不允许我查看传输数据的实际命令 我尝试按设置链接服务器,但出现以下错误: 已创建链接服务器,但连接测试失败。是否要保留链接的服务器 执行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)我实际拥有的
味精7303,第16级,状态1,第3行
无法为链接服务器(null)初始化OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的数据源对象 我是否应该留在Excel中并将其推送过来,而不是转到SQL Server并将数据拉入 我做错了什么 PS:请不要告诉我将其转换为csv文件!我试着少走几步,而不是多走几步
祝你好运我在这方面做了一些研究。我的问题还没有完全解决,但我想我可能会让你更进一步。尽管这个问题由来已久,但也许还有其他人需要帮助 通过运行:
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,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
但是我得到了这个错误:
Msg 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
“经常手动设置是一件痛苦的事情”。这是因为Excel字段发生了更改,还是因为您不喜欢使用向导?您应该能够保存包并在下次重新运行它。。。。我想-对SQL Express不是100%确定。在您的情况下,我可能只编写一个小C#应用程序,读取Excel并从中获取所需的数据,然后将这些行插入SQL Server。众所周知,“Jet OleDB”驱动程序很难使用,特别是在64位服务器操作系统上,因此如果可能的话,我会避免使用这些驱动程序。如果excel文件架构没有更改,只有文件名在更改,那么,您可以试着用动态源设置SSIS包来解决问题,您不需要每次都通过向导,只要在每次源代码更改时更新SSIS配置即可。我没有忘记您,我只是没有时间使用您的解决方案来尝试使其正常工作:(
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