Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2012 truy vấn dữ liệu Access 2007 sử dụng lỗi OPENROWSET

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi mức độ tương thích của cơ sở dữ liệu với T-SQL

  2. Tìm các thực thể tham chiếu trong SQL Server:sys.dm_sql_referencing_entities ()

  3. Có LastIndexOf trong SQL Server không?

  4. Kiểm tra xem một Bảng có được tham chiếu bởi một khóa ngoại trong SQL Server với OBJECTPROPERTY () hay không

  5. Ưu đãi lớn:SQL Server 2016 gói dịch vụ 1