DECLARE @PATH NVARCHAR(1000) = N'\\MY-SERVER\C$\Folder\\'
DECLARE @TABLE NVARCHAR(50) = SUBSTRING(@FILENAME,0,CHARINDEX('.',@FILENAME))
DECLARE @SQL NVARCHAR(4000) =
N'IF OBJECT_ID(''dbo.' + @TABLE + ''' , ''U'') IS NOT NULL
DROP TABLE dbo.[' + @TABLE + ']
SELECT * INTO [' + @TABLE + ']
FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0''
,''Text; Database='+@PATH+';''
,''SELECT * FROM [' + @FILENAME + ']'')'
EXEC(@SQL)
今天我在 SSIS 2012 中遇到了 Microsoft.ACE.OLEDB.12.0 驱动程序的问题。上面的脚本位于一个存储过程中,该过程根据 SSIS 循环提供的当前文件动态地将 .csv 加载到数据库中存储过程位于其中。目录中有文件。
直接在 SQL Server Management Studio 中运行时,存储过程可以正确运行。
直到今天为止,这一直运行良好。今天我收到以下错误:
执行查询“EXEC [dbo].[CreateAndImportCSVs] ?”失败并出现以下错误:“无法初始化链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。”。 可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。
有关此问题的任何帮助都会很棒!
编辑
因此,当我查看昨天服务器上安装的 Windows 更新时,我听到了警钟!安装了以下两个:
Microsoft Office Access 运行时和数据连接 2007 (SP3) http://support.microsoft.com/kb/2526310
2007 Microsoft Office System 更新 (KB967642) http://www.microsoft.com/downloads/details.aspx?FamilyId=E93AB1BE-ADE6-4FF8-8637-DBD3EBE3C5C5&displaylang=en
有很多值得尝试的事情:
EXCEL
进程没有在后台运行确保启用“临时分布式查询”(1)
USE [master]
GO
EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
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
了解更多信息如何解决 Microsoft.ACE.OLEDB.12.0 错误“未指定错误”
我还在以下链接中找到了一个有趣的建议解决方案,请看一下:
这个问题自行解决了。安装了更多更新,其中之一必须解决了先前更新引入的问题:
Microsoft Office 2010 (KB4011188) 64 位版本更新 https://support.microsoft.com/kb/4011188
Microsoft Office 2010 (KB2553347) 64 位版本更新 http://support.microsoft.com/kb/2553347
Microsoft Office 2010 安全更新 (KB2553338) 64 位版本 https://support.microsoft.com/kb/2553338
感谢您提供的所有帮助!
为我解决这个问题的最后一步是将电子表格移动到 SQL Server 能够访问的 Windows 目录。我将电子表格移动到一个新的子目录,位于我的 sql 数据库所在的位置,问题得到了解决。
如果 Office 的安装是“单击运行”安装,则 SQL Server 无法访问访问提供程序。
可以通过以下任一方法解决该问题。
分辨率
从 Microsoft 365 应用企业版 2009 开始,工作 已完成将 ACE 打破 C2R 虚拟化泡沫 以便 Office 之外的应用程序能够找到 ODBC, Access数据库引擎提供的OLEDB和DAO接口 C2R 安装。
可能不是一个解决方案,但你应该执行 SQL:
sp_executesql @SQL
它可以防止注射和感染。
目前我们安装了16.0。在一台服务器上,对于旧 12.0 和新 16.0 驱动程序,选项 N'AllowInProcess' 和 N'DynamicParameters' 均设置为 1。
在另一台服务器上,12.0 在两个选项都设置为 1 的情况下运行良好。但 16.0 仅当它们都设置为 0 时才有效。
IT 发誓两个系统是相同的.......