2013-04-04 58 views
5

Tôi nhận được lỗi sau khi cố gắng mở một file Excel trong SQL Server 2008 r2 64-bit:Excel vào SQL Server với Microsoft.ACE.OLEDB.12.0

Msg 7399, Level 16, State 1, Line 1 
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" 
reported an error. The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 1 
Cannot initialize the data source object of OLE DB provider 
"Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

Tôi đang sử dụng truy vấn sau:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; 
HDR=NO; IMEX=1; Database=\\filepath\filename.xlsx', 'SELECT * FROM [Sheet1$]') 

Điều thú vị là DBA có thể chạy nó mà không gặp sự cố. Tôi đã xem xét và chạy các truy vấn sau:

sp_configure 'Show Advanced Options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 

Tài khoản chạy có vẻ như có quyền truy cập sa. Điều gì có thể gây ra vấn đề này?

+0

làm tài khoản dịch vụ máy chủ sql có đủ quyền để đọc '\\ filepath \ filename.xlsx'? – shibormot

+0

Bạn có thể thực hiện truy vấn này: ** exec master..xp_cmdshell 'dir \\ filepath \' ** –

+0

Có một số gợi ý ở đây, FYI: http://granadacoder.wordpress.com/2010/12/07/ bug-in-documentation-microsoft-access-database-engine-2010-redistributable/ – granadaCoder

Trả lời

4

bạn đã thử (thử nghiệm) sao chép tệp Excel vào máy chủ SQL C: \ drive và thực hiện truy vấn đối với đường dẫn đó?

điều gì sẽ xảy ra khi bạn truy cập máy chủ và mở đường dẫn này trong hộp thoại Explorer/run: \ filepath \ filename.xlsx?

Bạn có thể thực hiện truy vấn này: exec master..xp_cmdshell 'dir' \ filepath \ filename.xlsx '?

Điều này sẽ giúp bạn xác định xem đó có phải là vấn đề về quyền mạng hay không hoặc liệu tài khoản có quyền sử dụng truy vấn được phân phối hay không.

Linh cảm của tôi là đó chắc chắn là vấn đề quyền/quyền, vì DBA có thể chạy nó.

+1

Tôi đã tìm thấy sự cố. Tôi đã có tập tin trên một máy chủ SQL khác nhau (kiểm tra) và đã chạy truy vấn từ UAT. Nó đã ném tôi ra khi các DBA có thể chạy nó với các tài khoản của họ. Vì nó là một đường dẫn mạng và nó làm việc cho họ, tôi đã nghĩ rằng đó là một vấn đề về quyền (mà gián tiếp là nó). DBA đã cố gắng cho tôi biết đó là vấn đề bảo mật người dùng proxy khi người dùng proxy không có quyền truy cập vào thư mục/tệp đó (vì quá trình này cuối cùng sẽ được chạy trong SSIS) vì vậy chúng tôi vừa sai vừa vừa đúng. Bây giờ để đảm bảo nó sẽ hoạt động trong sản phẩm. Vì bạn là người gần nhất bạn nhận được tín dụng. – user1238918

+0

Tôi là 'sa' trên máy tính cục bộ của mình. Tôi không thể chạy proc được lưu trữ mà bạn đã cho tôi. 'exec master..xp_cmdshell 'dir' C: \ My Temp Files \ Excel \ relative.xls''. Tôi gặp lỗi 'Cú pháp không chính xác gần' \ '. Dấu ngoặc kép chưa được khai báo sau chuỗi ký tự '' .' Làm thế nào để sửa lỗi này? –

+0

thử đặt đường dẫn trong dấu ngoặc kép như sau: 'exec master..xp_cmdshell 'dir" C: \ My Temp Files \ Excel \ relative.xls "'' –

4

Như Philip đã nói ... trước tiên hãy kiểm tra việc thực thi xp_cmdshell. Nếu nó không hoạt động do vấn đề cho phép thì trước tiên cấu hình lại tùy chọn này bằng cách chạy

SP_CONFIGURE 'XP_CMDSHELL',1 
GO    
RECONFIGURE 

sau khi chạy này lệnh sau để kích hoạt tính năng cho phép máy chủ liên kết với khả năng InProcess cho ACE lái xe:

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 

Bây giờ chạy này loạt lệnh:

sp_configure 'show advanced options', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1 
GO 
RECONFIGURE 

nếu gặp lỗi sau đó chạy từng lệnh riêng biệt. Và cuối cùng chạy nhập tất cả dữ liệu excel của bạn vào máy chủ SQL bằng cách chạy lệnh được đề cập dưới đây:

SELECT * INTO TargetTableName FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
         'Excel 12.0;Database=FilePath\fileName.xlsx;HDR=YES', 
         'SELECT * FROM [sheetName$]') 

Hãy nhớ rằng trong trường hợp xls bạn phải sử dụng Jet Driver thay vì ACE. Và cũng có thể TargetTableName không tồn tại trước khi chạy truy vấn này. Chúc mừng mã hóa :)

+0

Truy vấn Ad Hoc không được phép trên máy chủ cơ sở dữ liệu của chúng tôi. Vì vậy, giải pháp đó sẽ không hoạt động. Tôi có một công việc xung quanh nơi tôi chuyển đổi tập tin Excel sang CSV thông qua Script Task để giải quyết vấn đề của tôi. Cảm ơn sự giúp đỡ của bạn. – user1238918

+0

Tôi cũng phải chạy SQL Server Management Studio với tư cách quản trị viên. –

-1

SQL Server Management Studio. Gõ Services.msc trong lệnh chạy để mở cửa sổ dịch vụ.

Tìm kiếm Dịch vụ SQL Server và nhấp chuột phải vào nó và chọn thuộc tính.

Trong tab Đăng nhập, chọn tài khoản hệ thống/hoặc chọn ID miền và Tài khoản và mật khẩu của bạn.

Sau khi tìm thấy tên đăng nhập, hãy nhấn OK.

Bây giờ, hãy nhập mật khẩu đăng nhập của bạn vào cả hai trường.

Khởi động lại dịch vụ để các thay đổi mới được áp dụng như trong hình bên dưới.

Bây giờ bắt đầu SQL Server Management Studio và thử chạy truy vấn nếu vẫn không hoạt động, hãy thử khởi động lại hệ thống.

hoặc thực hiện truy vấn.

SỬ DỤNG [chủ] 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

Các vấn đề liên quan