簡體   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