Apa yang bisa lebih sederhana daripada mendapatkan data dari tabel Excel di SQL Server?
Ada banyak cara untuk menyelesaikan tugas ini. Anda dapat menggunakan Layanan Integrasi (sebelumnya DTS) atau impor dan ekspor wizard, yang sama di bawah tenda. Cara lain adalah dengan membuat aplikasi ADO.NET sederhana . Anda dapat menggunakan Server Tertaut mekanisme, yang memungkinkan Anda melihat objek apa pun yang dapat dijangkau ODBC / OLE DB dalam bentuk tabel (kumpulan tabel) atau hasil kueri ad hoc.
Sampai arsitektur 64-bit berhenti menjadi sesuatu dari kelas hi-end dan datang ke laptop pengembang dan pengguna. Pengguna biasa tidak mungkin menginstal server database, sementara pengembang memiliki SQL Server 64-bit pada mesin 64-bit dengan MS Office 32-bit adalah hal yang normal. Namun, dalam kasus ini, menggunakan Excel atau Access dengan server tertaut SQL Server mungkin menjadi tantangan karena pengandar 32-bit. Tidak ada penyedia yang tersedia untuk MS Office, meskipun saya telah menginstalnya di PC saya.
Dengan demikian, upaya untuk menggunakan Excel atau Access dengan server tertaut SQL Server, seperti yang dijelaskan dalam dokumentasi, akan menyebabkan kesalahan berikut:
Msg 7302, Level 16, State 1, Line 1
Tidak dapat membuat instance penyedia OLE DB «Microsoft.ACE.OLEDB.12.0» untuk server tertaut…
Jadi, apa yang harus dilakukan?
Instal penyedia 64-bit, yang tersedia untuk diunduh di Microsoft Access Database Engine 2010 Redistributable. Kami mendapatkan kesalahan berikut selama proses instalasi:
Jika Office 32-bit tidak diinstal di komputer, Anda tidak akan mendapatkan peringatan ini.
Haruskah saya memilih antara MS Office versi 64-bit atau 32-bit dan SQL Server versi 64-bit atau 32-bit? Menghapus satu versi dan menginstal yang lain bukanlah solusi yang fleksibel. Selain itu, itu tidak selalu memungkinkan. Mari kita lihat pertanyaan yang diajukan seseorang di MSDN:
Database MS Access adalah lingkungan produksi di situs pelanggan, dan itu bukan pilihan bagi saya untuk menghapus instalasinya dan menginstal versi 64 bit. Ini juga bukan pilihan untuk menghapus instalasi SQL Server 64 bit yang ada dan menginstal versi 32 bit, tentu saja. Sebuah instalasi tambahan dari SQL Server 32 bit, hanya menyediakan link ke MS Access akan menjadi satu-satunya pilihan kemudian. Saya menemukan ini cukup mengerikan.
Saya tidak mengerti bagian ini.
Karena tidak ada Jet 64-bit, Anda perlu mengunduh dan menginstal «Microsoft Access Database Engine 2010 Redistributable» versi 64-bit. — Terima kasih atas jawaban Anda, tetapi ketika saya menginstal AccessDatabaseEngine_X64.exe saya mendapatkan kesalahan berikut (gambar 1) — Silakan lihat artikel KB ini: support.microsoft.com/kb/2269468 — Artikel dalam tautan di pesan terakhir Anda memberi tahu untuk menghapus semua produk Office 32 bit. Itu tidak masuk akal bagi saya, karena tujuannya adalah untuk terhubung ke database MS Access 32 bit… — Anda perlu menginstal versi 64-bit "Penyedia Microsoft ACE OLEDB" untuk menyambung ke file Access (32-bit atau 64-bit) dari SQL Server. — Tapi saya mencoba menginstal driver 64 bit, tapi itu memberi saya kesalahan instalasi… — Artikel KB sebelumnya menjelaskan penyebab dan memberikan solusi, Anda bisa merujuknya. — Anda membimbing saya dalam lingkaran.
Nah, masalahnya adalah membuat Penyedia Microsoft ACE OLEDB versi 64-bit bekerja dengan Office 32-bit. Mengapa tidak mungkin melakukan ini secara langsung adalah pertanyaan besar. Ada banyak informasi tentang topik ini:
Fakta bahwa mereka tidak dapat memaksa kita untuk mengkompilasi dua versi berbeda dari aplikasi kita; satu khusus untuk platform x86 dan satu untuk platform x64. Kemudian kita harus menentukan versi driver ACE mana yang diinstal sehingga kita tahu versi mana (32 atau 64 bit) dari aplikasi kita yang akan diinstal. Hidup akan jauh lebih sederhana jika kita bisa mengompilasi aplikasi kita untuk AnyCPU default dan kemudian penyedia data 32 dan 64 diizinkan untuk diinstal… Mengapa ACE 32 dan 64 bit tidak dapat hidup berdampingan? — Ini didasarkan pada fakta bahwa Microsoft tidak mendukung pemasangan berdampingan Microsoft Office 2010 32 dan 64-bit atau komponen yang bergantung padanya… — Maaf, tapi itu bukan jawaban yang sangat membantu untuk pertanyaan itu. T:Mengapa Microsoft Access Database Engine 2010 Redistributable (AccessDatabaseEngine.exe dan AccessDatabaseEngine_X64.exe) versi 32 dan 64 bit tidak dapat diinstal pada mesin yang sama? J:Microsoft tidak mendukung pemasangan berdampingan Microsoft Office 2010 32 dan 64-bit. Itu tidak menjawab, itu hanya mengulangi pertanyaan dengan kata lain. T:Mengapa saya tidak bisa melakukan ini? A:Karena kami tidak mendukungnya. T:Mengapa Anda tidak dapat mendukungnya? J:Karena kami tidak mendukungnya.
Sebagai solusinya, saya menggunakan AccessDatabaseEngine_X64.exe dengan kunci /pasif yang memungkinkan penyedia versi 64-bit hidup berdampingan dengan versi Office 32-bit. Perlu dicatat bahwa Microsoft tidak mendukung metode ini secara resmi. Selain itu, ada peringatan tentang kemungkinan masalah dengan kompatibilitas.
Saat saya menginstal driver AccessDatabaseEngine_x64.exe … MS Office Pro Plus memulai Proses Konfigurasi MS yang dapat memakan waktu hingga satu atau dua menit sebelum dokumen atau program Office dibuka . Jika office 2010 32 bit diinstal dan jika ace 64-bit diinstal dengan /pasif , lalu **setiap** kali Anda menjalankan Access 2010, Anda mendapatkan rutinitas penginstalan otomatis yang disetel ulang ke driver 32-bit untuk kantor .
Dalam kasus saya (Office 2013 Pro Plus, SQL Server 2012 Developer Ed., Windows 8.1), tidak ada masalah yang terlihat (mengetuk kayu). Namun, saya ingin menambahkan bahwa ini apa adanya dan tanpa kewajiban apa pun.
Unduh AccessDatabaseEngine_x64.exe, buat Titik Pemulihan Sistem (sepertinya dibuat secara otomatis saat memperbarui komponen Office) dan jalankan dari baris perintah. Berikut adalah kunci yang mungkin:
Berbeda dengan gambar 2, instalasi dijalankan
Kemudian, klik Segarkan pada menu pintasan Penyedia:
Saya membuat file xslx sederhana dengan sangat cepat:
Di SQL Server, buat server tertaut di Excel ini:
jika ada (pilih 1 dari sys.servers di mana name ='XlsLnkSrv') exec 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=Ya'
Skrip 1
Baca:
pilih * dari openquery (XlsLnkSrv, 'Pilih * dari [Sheet1$]')
Skrip 2
Apakah itu berhasil? Tidak!
Msg 7399, Level 16, State 1, Line 1
Penyedia OLE DB «Microsoft.ACE.OLEDB.12.0» untuk server tertaut «XlsLnkSrv» melaporkan kesalahan. Penyedia tidak memberikan informasi apa pun tentang kesalahan tersebut.
Msg 7303, Level 16, State 1, Line 1
Tidak dapat menginisialisasi objek sumber data penyedia OLE DB «Microsoft.ACE.OLEDB.12.0» untuk server tertaut «XlsLnkSrv».
Tetap saja, itu berhasil!
Demikian juga,
pilih * dari openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Temp\Sample.xlsx;HDR=Yes', 'Select * from [Sheet1$]')Pada awalnya, kita perlu melakukan hal berikut:
exec sp_configure 'tampilkan opsi lanjutan', 1;konfigurasi ulang;exec sp_configure 'Kueri Terdistribusi Ad Hoc', 1;konfigurasi ulangSkrip 3
Sebagai kesimpulan, saya ingin mencatat bahwa penyedia 64-bit menggantikan penyedia 32-bit. Jika kita membuat koneksi untuk Sample.xslsx dalam Aliran Data paket DTS, kita akan mendapatkan kegagalan inisialisasi Penyedia DB Microsoft Office 12.0 Access Database Engine, yang secara logika benar, karena devenv.exe adalah 32-bit, sedangkan penyedia adalah 64-bit. Untuk memulihkan perilaku, Anda perlu memulihkan penyedia Office 32-bit (di sini). Namun, dalam kasus ini, kami tidak dapat menggunakan server yang ditautkan. Untuk membuat server tertaut berfungsi, buka awal artikel.