[英]The 32-bit OLE DB provider "Microsoft.ACE.OLEDB.12.0" cannot be loaded in-process on a 64-bit SQL Server
[英]Batch file that runs sql script getting error Ad hoc access to OLE DB provider 'Microsoft.ACE.OLEDB.12.0' has been denied.'
“您必须通过链接的服务器访问此提供程序。”
我正在从也是远程的数据库服务器远程运行此批处理文件。 我正在尝试进行导出,该导出不需要链接服务器。 当我在SSMS中运行查询时,它可以很好地导出,但是从批处理中执行时,它会给我以下错误消息。 我认为这可能是因为它们在2个不同的帐户上。
这是我的批处理代码:
SQLCMD -S dbserver -E -d dbname-i \\Network\fldr\rpt\test\script.sql
PAUSE
这是我的SQL脚本:
SET ANSI_NULLS ON
GO
SET ANSI_WARNINGS ON
GO
SET QUOTED_IDENTIFIER ON
GO
PRINT 'exporting data...'
INSERT INTO OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;
Database=\\Network\fldr\rpt\test\testdata.xls;',
'SELECT * FROM [Sheet1$]') SELECT * FROM [dbo].view_test ORDER BY [Col4]
cmd中的错误消息:
我解决了问题。 从我的工作PC运行批处理文件时,它将使用其他帐户(我的Active Directory帐户凭据)击中SQL Server,该帐户在SSMS中不存在。 我创建了一个帐户,它可以正常工作。
我在此之前采取的其他步骤(也是必需的)如下:
1)运行此代码
USE [master]
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
2)编辑注册表并在以下位置添加值为“ 0”的DWORD“ disallowAdHocProcess”:[HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SQL Server \\ MSSQL10.SQLADV \\ Providers \\ Microsoft.ACE.OLEDB.12.0]“ disallowAdHocProcess” = DWORD:00000000
3)本文: http : //support.microsoft.com/kb/814398,并使用ProcMon程序来查找被拒绝访问的临时路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.