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