运行sql脚本的batch file获取错误对OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的临时访问已被拒绝。

'你必须通过链接的服务器访问这个提供者。

我从远程数据库服务器远程运行这个batch file。 我试图做一个出口,不应该有一个需要链接的服务器。 当我在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运行batch file时,它使用不同的帐户(我的Active Directory帐户凭据,SSMS中不存在的帐户)访问SQL Server。 我创build了该帐户,它的工作。

我在此之前采取的其他步骤(也是需要的)如下:

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)编辑registry并在此位置添加值为“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程序来查找我正在被拒绝访问的临时path。