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

时间:2014-07-24 21:00:52

标签: sql sql-server excel batch-file export-to-excel

'您必须通过链接服务器访问此提供程序。'

我正从远程数据库服务器远程运行此批处理文件。我正在尝试进行不需要链接服务器的导出。当我在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中的错误消息:

enter image description here

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。当从我的工作PC运行批处理文件时,它使用不同的帐户命中SQL Server - 我的Active Directory帐户凭据,这是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)编辑注册表并添加DWORD" disallowAdHocProcess"值为" 0"在这个位置: [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程序查找我被拒绝访问的临时路径。