繁体   English   中英

运行SQL脚本的批处理文件得到错误对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问已被拒绝。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM