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

Excel 32-bit và SQL Server 64-bit

Còn gì đơn giản hơn lấy dữ liệu từ bảng Excel trong SQL Server?

Có nhiều cách để hoàn thành nhiệm vụ này. Bạn có thể sử dụng Dịch vụ tích hợp (DTS cũ) hoặc nhập và xuất wizard, cũng giống như vậy. Một cách khác là tạo một ứng dụng ADO.NET đơn giản . Bạn có thể sử dụng Máy chủ được liên kết , cho phép bạn xem bất kỳ đối tượng có thể truy cập ODBC / OLE DB nào ở dạng bảng (tập hợp các bảng) hoặc kết quả của một truy vấn đặc biệt.

Mãi cho đến khi kiến ​​trúc 64-bit không còn là thứ của dòng hi-end và đến với máy tính xách tay của nhà phát triển và người dùng. Một người dùng thông thường không có khả năng cài đặt một máy chủ cơ sở dữ liệu, trong khi một nhà phát triển có một SQL Server 64-bit trên một máy 64-bit với MS Office 32-bit là điều bình thường đối với một nhà phát triển. Tuy nhiên, trong trường hợp này, việc sử dụng Excel hoặc Access với các máy chủ được liên kết với SQL Server có thể là một thách thức vì trình điều khiển là 32-bit. Không có nhà cung cấp nào có sẵn cho MS Office, mặc dù tôi đã cài đặt một nhà cung cấp trên PC của mình.

Do đó, việc cố gắng sử dụng Excel hoặc Access với các máy chủ được liên kết với SQL Server, như được mô tả trong tài liệu, sẽ gây ra lỗi sau:

Bản tin 7302, Mức 16, Trạng thái 1, Dòng 1

Không thể tạo phiên bản của nhà cung cấp OLE DB «Microsoft.ACE.OLEDB.12.0» cho máy chủ được liên kết…

Vì vậy, phải làm gì?

Cài đặt trình cung cấp 64-bit, có sẵn để tải xuống tại Microsoft Access Database Engine 2010 Redistributable. Chúng tôi gặp lỗi sau trong quá trình cài đặt:

Nếu Office 32-bit không được cài đặt trên máy tính thì bạn sẽ không nhận được cảnh báo này.

Tôi có nên chọn giữa phiên bản 64-bit hoặc 32-bit của MS Office và phiên bản 64-bit hoặc 32-bit của SQL Server không? Gỡ cài đặt một phiên bản và cài đặt một phiên bản khác không phải là một giải pháp linh hoạt. Hơn nữa, không phải lúc nào cũng có thể. Hãy xem xét câu hỏi mà một người đã nêu ra trên MSDN:

Cơ sở dữ liệu MS Access là môi trường sản xuất tại trang web của khách hàng và tôi không phải là một tùy chọn để gỡ cài đặt nó và cài đặt phiên bản 64 bit. Tất nhiên, nó cũng không phải là một tùy chọn để gỡ cài đặt SQL Server 64 bit hiện có và cài đặt phiên bản 32 bit. Khi đó, cài đặt bổ sung SQL Server 32 bit, chỉ cung cấp liên kết đến MS Access sẽ là tùy chọn duy nhất. Tôi thấy điều này khá kinh khủng.

Tôi không hiểu phần này.

Vì không có Jet 64-bit, bạn cần tải xuống và cài đặt phiên bản 64-bit của «Microsoft Access Database Engine 2010 Redistributable». - Cảm ơn câu trả lời của bạn, nhưng khi tôi cài đặt AccessDatabaseEngine_X64.exe, tôi gặp lỗi sau (hình 1) - Vui lòng tham khảo bài viết KB này: support.microsoft.com/kb/2269468 - Bài viết trong liên kết trong thư cuối cùng của bạn yêu cầu hủy cài đặt tất cả các sản phẩm Office 32 bits. Điều đó không có ý nghĩa gì đối với tôi, vì mục tiêu là kết nối với cơ sở dữ liệu 32 bit MS Access… - Bạn cần cài đặt phiên bản 64-bit của “Nhà cung cấp Microsoft ACE OLEDB” để kết nối với tệp Access (32-bit hoặc 64-bit) từ SQL Server. - Tuy nhiên, tôi đã cố gắng cài đặt trình điều khiển 64 bit nhưng nó gây cho tôi lỗi cài đặt… - Bài viết trước của KB đã giải thích nguyên nhân và đưa ra giải pháp, bạn có thể tham khảo thêm. - Bạn đang hướng dẫn tôi trong các vòng kết nối.

Chà, vấn đề là làm cho phiên bản 64-bit của Microsoft ACE OLEDB Provider hoạt động với Office 32-bit. Tại sao không thể làm điều này trực tiếp là một câu hỏi lớn. Có rất nhiều thông tin về chủ đề này:

Thực tế là họ không thể buộc chúng tôi biên dịch hai phiên bản khác nhau của ứng dụng của chúng tôi; một dành riêng cho nền tảng x86 và một dành cho nền tảng x64. Sau đó, bằng cách nào đó chúng ta phải xác định phiên bản của trình điều khiển ACE được cài đặt để chúng ta biết phiên bản nào (32 hoặc 64 bit) của ứng dụng của chúng ta để cài đặt. Cuộc sống sẽ đơn giản hơn nhiều nếu chúng ta chỉ có thể biên dịch ứng dụng của mình cho AnyCPU mặc định và sau đó cả hai bộ dữ liệu 32 và 64 đều được phép cài đặt… Tại sao ACE 32 và 64 bit không thể cùng tồn tại? - Nó dựa trên thực tế là Microsoft không hỗ trợ cài đặt song song Microsoft Office 2010 32 và 64 bit hoặc các thành phần phụ thuộc của chúng… - Tôi xin lỗi, nhưng đó không phải là câu trả lời hữu ích cho câu hỏi. H:Tại sao không thể cài đặt cả hai phiên bản 32 và 64 bit của Microsoft Access Database Engine 2010 Redistributable (AccessDatabaseEngine.exe và AccessDatabaseEngine_X64.exe) trên cùng một máy? Đ:Microsoft không hỗ trợ cài đặt song song của Microsoft Office 32 và 64 bit. Điều đó không trả lời, đó chỉ là lặp lại câu hỏi theo cách khác. H:Tại sao tôi không thể làm điều này? A:Bởi vì chúng tôi không hỗ trợ nó. Q:Tại sao bạn không thể hỗ trợ nó? A:Bởi vì chúng tôi không hỗ trợ nó.

Để giải quyết vấn đề, tôi đã sử dụng AccessDatabaseEngine_X64.exe với khóa / bị động cho phép phiên bản 64-bit của nhà cung cấp cùng tồn tại với phiên bản Office 32-bit. Cần lưu ý rằng Microsoft không hỗ trợ chính thức phương pháp này. Ngoài ra, có những cảnh báo về các vấn đề có thể xảy ra với khả năng tương thích.

Khi tôi cài đặt trình điều khiển AccessDatabaseEngine_x64.exe … MS Office Pro Plus bắt đầu Quy trình cấu hình MS có thể mất đến một hoặc hai phút trước khi tài liệu hoặc chương trình Office mở ra . Nếu office 2010 32 bit được cài đặt và nếu ace 64 bit được cài đặt với / passive , sau đó ** mỗi ** khi bạn chạy Access 2010, bạn sẽ nhận được quy trình cài đặt tự động đặt lại trình điều khiển 32 bit cho văn phòng .

Trong trường hợp của tôi (Office 2013 Pro Plus, SQL Server 2012 Developer Ed., Windows 8.1), không có vấn đề gì xảy ra (gõ nhẹ). Tuy nhiên, tôi muốn nói thêm rằng nó vẫn như vậy và không có bất kỳ trách nhiệm pháp lý nào.

Tải xuống AccessDatabaseEngine_x64.exe, tạo Điểm khôi phục hệ thống (dường như nó được tạo tự động khi cập nhật các thành phần Office) và chạy từ dòng lệnh. Đây là các chìa khóa khả thi:

Không giống như hình 2, quá trình cài đặt được chạy

Sau đó, nhấp vào Làm mới trên menu lối tắt Nhà cung cấp:

Tôi đã tạo một tệp xslx đơn giản rất nhanh chóng:

Trong SQL Server, hãy tạo một máy chủ được liên kết trên Excel này:

 nếu tồn tại (chọn 1 từ sys.servers trong đó name ='XlsLnkSrv') thi hành sp_dropserver @server ='XlsLnkSrv', @droplogins ='droplogins'exec sp_addlinkedserver @server =' XlsLnkSrv ', @srvproduct =' ACE 12.0 ' , @provider ='Microsoft.ACE.OLEDB.12.0', @datasrc ='C:\ Temp \ Sample.xlsx', @provstr ='Excel 12.0; HDR =Có '

Tập lệnh 1

Đọc:

 select * from openquery (XlsLnkSrv, 'Select * from [Sheet1 $]') 

Tập lệnh 2

Nó có thành công không? Không!

Msg 7399, Mức 16, Trạng thái 1, Dòng 1
Nhà cung cấp OLE DB «Microsoft.ACE.OLEDB.12.0» cho máy chủ được liên kết «XlsLnkSrv» đã báo cáo lỗi. Nhà cung cấp không cung cấp bất kỳ thông tin nào về lỗi.
Msg 7303, Mức 16, Trạng thái 1, Dòng 1
Không thể khởi tạo đối tượng nguồn dữ liệu của nhà cung cấp OLE DB «Microsoft.ACE.OLEDB.12.0» cho máy chủ được liên kết «XlsLnkSrv».

Tuy nhiên, nó vẫn thành công!

Tương tự,

 select * from openrowset ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; Database =C:\ Temp \ Sample.xlsx; HDR =Yes', 'Select * from [Sheet1 $]')  

Đầu tiên, chúng ta cần làm như sau:

 execute sp_configure 'hiển thị các tùy chọn nâng cao', 1; định cấu hình lại; thực thi sp_configure 'Truy vấn phân tán Ad Hoc', 1; định cấu hình lại 

Tập lệnh 3

Kết luận, tôi muốn lưu ý rằng nhà cung cấp 64-bit đã thay thế nhà cung cấp 32-bit. Nếu chúng tôi tạo kết nối cho Sample.xslsx trong Data Flow của gói DTS, chúng tôi sẽ gặp lỗi khởi tạo Microsoft Office 12.0 Access Database Engine OLE DB Provider, điều này đúng về mặt logic, vì devenv.exe là 32-bit, trong khi nhà cung cấp là 64-bit. Để khôi phục hành vi, cần phải khôi phục nhà cung cấp Office 32-bit (tại đây). Tuy nhiên, trong trường hợp này, chúng tôi không thể sử dụng máy chủ được liên kết. Để làm cho máy chủ được liên kết hoạt động, hãy chuyển đến đầu bài viết.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để cài đặt localdb riêng biệt?

  2. SQL Server 2016:Tạo một thủ tục được lưu trữ

  3. Cách lấy danh sách các cột có Ràng buộc Duy nhất trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 98

  4. Thủ tục được lưu trữ - trả về danh tính dưới dạng tham số đầu ra hoặc đại lượng vô hướng

  5. Chỉ mục nằm ngoài giới hạn của Mảng. (Microsoft.SqlServer.smo)