Cuối cùng, sau nhiều lần cố gắng không thành công để SQL Server "nói chuyện" với cơ sở dữ liệu Access - dưới dạng "Máy chủ được liên kết" trong SSMS hoặc qua OPENROWSET()
trong T-SQL - Tôi tìm thấy bài đăng trên blog này cung cấp ba (3) đề xuất sau.
Tinh chỉnh # 1:Cài đặt nhà cung cấp OLE DB
Nhà cung cấp OLE DB cho ACE (hoặc Máy bay phản lực) phải bật tùy chọn "Tham số động" và "Cho phép trong quá trình". Trong SSMS, hãy mở
Đối tượng máy chủ> Máy chủ được liên kết> Nhà cung cấp
nhánh, nhấp chuột phải vào "Microsoft.ACE.OLEDB.12.0" (hoặc "Microsoft.Jet.OLEDB.4.0"), chọn "Thuộc tính" và đảm bảo rằng các tùy chọn đó đã được chọn:
Tinh chỉnh # 2:Quyền đối với thư mục tạm thời
Đây là một trong những điều đã làm tôi bối rối.
Rõ ràng SQL Server cần ghi thông tin vào một tệp tạm thời trong khi chạy truy vấn OLE DB đối với cơ sở dữ liệu Access. Bởi vì SQL Server đang chạy như một dịch vụ, nó sử dụng thư mục% TEMP% của tài khoản mà dịch vụ đang chạy.
Nếu dịch vụ SQL Server đang chạy trong tài khoản "Dịch vụ mạng" tích hợp sẵn thì thư mục tạm thời là
% SystemRoot% \ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp
và nếu nó đang chạy trong tài khoản "Dịch vụ cục bộ" được tích hợp sẵn thì thư mục tạm thời là
% SystemRoot% \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp
Vấn đề của tôi là SSMS đang chạy trong my tài khoản (không phải DỊCH VỤ MẠNG) nên tôi chỉ có quyền truy cập Đọc vào thư mục Temp
Sau khi tôi tự cấp quyền Sửa đổi quyền trên thư mục đó
và kích hoạt các truy vấn OPENROWSET như được nêu trong một câu hỏi khác ở đây, cụ thể là ...
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
... truy vấn của tôi hoạt động tốt:
Tinh chỉnh # 3:memory_to_reserve
Mặc dù tôi không cần sử dụng nó trong trường hợp của mình, blog nói trên cũng tuyên bố rằng việc điều chỉnh tham số khởi động "-g memory_to_reserve" cho dịch vụ SQL Server cũng có thể giúp tránh các lỗi tương tự. Để làm điều đó:
- khởi chạy Trình quản lý cấu hình SQL Server
- nhấp chuột phải vào dịch vụ SQL Server (tab "Dịch vụ SQL Server") và chọn "Thuộc tính"
- trên tab "Nâng cao", thêm
-g512;
sang cài đặt "Thông số khởi động" - khởi động lại dịch vụ SQL Server
Để biết thêm chi tiết về cài đặt "memory_to_reserve", hãy xem bài viết MSDN tại đây.