Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

32-bitowy program Excel i 64-bitowy serwer SQL

Co może być prostszego niż pobranie danych z tabeli Excela w SQL Server?

Jest wiele sposobów na wykonanie tego zadania. Możesz skorzystać z Usług integracyjnych (dawny DTS) lub import i eksport czarodziej, który jest taki sam pod maską. Innym sposobem jest stworzenie prostej aplikacji ADO.NET . Możesz użyć serwera połączonego mechanizm, który pozwala zobaczyć dowolny dostępny obiekt ODBC / OLE DB w postaci tabeli (zbiór tabel) lub wynik zapytania ad hoc.

Dopiero gdy architektura 64-bitowa przestała być czymś z klasy hi-end i pojawiła się na laptopach deweloperów i użytkowników. Typowy użytkownik raczej nie zainstaluje serwera bazy danych, podczas gdy deweloper ma 64-bitowy serwer SQL na 64-bitowej maszynie z 32-bitowym pakietem MS Office. Jednak w tym przypadku używanie programu Excel lub Access z połączonymi serwerami SQL Server może być wyzwaniem, ponieważ sterowniki są 32-bitowe. Nie ma dostępnych dostawców pakietu MS Office, chociaż mam jednego zainstalowanego na moim komputerze.

Tak więc próba użycia programu Excel lub Access z serwerami połączonymi SQL Server, jak opisano w dokumentacji, spowoduje następujący błąd:

Wiadomość 7302, poziom 16, stan 1, wiersz 1

Nie można utworzyć wystąpienia dostawcy OLE DB «Microsoft.ACE.OLEDB.12.0» dla połączonego serwera…

Więc co robić?

Zainstaluj dostawcę 64-bitowego, który jest dostępny do pobrania w witrynie Microsoft Access Database Engine 2010 Redistributable. Podczas procesu instalacji otrzymujemy następujący błąd:

Jeśli na komputerze nie zainstalowano 32-bitowego pakietu Office, nie otrzymasz tego ostrzeżenia.

Czy mam wybrać między 64-bitową czy 32-bitową wersją MS Office a 64-bitową lub 32-bitową wersją SQL Server? Odinstalowanie jednej wersji i zainstalowanie innej nie jest rozwiązaniem elastycznym. Co więcej, nie zawsze jest to możliwe. Przyjrzyjmy się pytaniu, które dana osoba zadała w MSDN:

Baza danych MS Access jest środowiskiem produkcyjnym w witrynie klienta i nie mam opcji, aby ją odinstalować i zainstalować wersję 64-bitową. Nie jest to również opcja deinstalacji istniejącego 64-bitowego serwera SQL Server i oczywiście zainstalowania wersji 32-bitowej. Wówczas jedyną opcją byłaby dodatkowa instalacja 32-bitowego serwera SQL Server, zapewniająca jedynie łącze do MS Access. Uważam to za dość straszne.

Nie rozumiem tej części.

Ponieważ nie ma 64-bitowego Jet, musisz pobrać i zainstalować 64-bitową wersję «Microsoft Access Database Engine 2010 Redistributable». Dziękuję za odpowiedź, ale podczas instalacji AccessDatabaseEngine_X64.exe pojawia się następujący błąd (zdjęcie 1) Proszę zapoznać się z tym artykułem KB: support.microsoft.com/kb/2269468 Artykuł w łączu w ostatniej wiadomości mówi, aby odinstalować wszystkie 32-bitowe produkty pakietu Office. To nie ma dla mnie sensu, ponieważ celem jest połączenie z 32-bitową bazą danych MS Access… Musisz zainstalować 64-bitową wersję „Microsoft ACE OLEDB Provider”, aby połączyć się z plikiem Access (32-bitowym lub 64-bitowym) z SQL Server. Ale próbowałem zainstalować sterownik 64-bitowy, ale powoduje to błąd instalacji… Poprzedni artykuł KB wyjaśnia przyczynę i podaje rozwiązanie, do którego możesz się odwołać. Oprowadzasz mnie w kółko.

Problem polega na tym, aby 64-bitowa wersja Microsoft ACE OLEDB Provider działała z 32-bitowym pakietem Office. Dlaczego nie można tego zrobić bezpośrednio, to duże pytanie. Jest wiele informacji na ten temat:

Fakt, że nie mogą zmusić nas do skompilowania dwóch różnych wersji naszej aplikacji; jeden specjalnie dla platformy x86 i jeden dla platformy x64. Następnie musimy w jakiś sposób określić, która wersja sterownika ACE jest zainstalowana, abyśmy wiedzieli, którą wersję (32 lub 64 bitową) naszej aplikacji zainstalować. Życie byłoby znacznie prostsze, gdybyśmy mogli po prostu skompilować naszą aplikację dla domyślnego AnyCPU, a następnie umożliwić instalację zarówno 32, jak i 64 dostawców danych… Dlaczego 32-bitowy i 64-bitowy ACE nie może współistnieć? Opiera się na fakcie, że firma Microsoft nie obsługuje instalacji side-by-side 32- i 64-bitowego pakietu Microsoft Office 2010 ani jego zależnych składników… Przepraszam, ale nie jest to zbyt pomocna odpowiedź na to pytanie. P:Dlaczego 32- i 64-bitowych wersji aparatu bazy danych programu Microsoft Access 2010 Redistributable (AccessDatabaseEngine.exe i AccessDatabaseEngine_X64.exe) nie można zainstalować na tym samym komputerze? Odp.:Microsoft nie obsługuje instalacji obok siebie 32- i 64-bitowego pakietu Microsoft Office 2010. To nie jest odpowiedź, to po prostu powtarzanie pytania innymi słowy. P:Dlaczego nie mogę tego zrobić? O:Ponieważ tego nie wspieramy. P:Dlaczego nie możesz tego wesprzeć? O:Ponieważ tego nie wspieramy.

Jako obejście użyłem AccessDatabaseEngine_X64.exe z kluczem /passive, który umożliwia współistnienie 64-bitowej wersji dostawcy z 32-bitową wersją Office. Należy zauważyć, że Microsoft oficjalnie nie wspiera tej metody. Ponadto istnieją ostrzeżenia dotyczące możliwych problemów z kompatybilnością.

Kiedy zainstalowałem sterownik AccessDatabaseEngine_x64.exe … MS Office Pro Plus uruchamia proces konfiguracji MS, który może potrwać do minuty lub dwóch, zanim otworzy się dokument lub program pakietu Office . Jeśli zainstalowany jest 32-bitowy Office 2010 i jeśli 64-bitowy ace jest zainstalowany z /passive , a **za każdym** razem, gdy uruchamiasz Access 2010, otrzymujesz procedurę automatycznej instalacji, która resetuje się do 32-bitowych sterowników dla biura .

W moim przypadku (Office 2013 Pro Plus, SQL Server 2012 Developer Ed., Windows 8.1) nie było widocznych problemów (pukanie do drewna). Mimo to dodam, że jest tak, jak jest i bez żadnych zobowiązań.

Pobierz AccessDatabaseEngine_x64.exe, utwórz punkt przywracania systemu (wydaje się, że jest tworzony automatycznie podczas aktualizacji składników pakietu Office) i uruchom z wiersza poleceń. Oto możliwe klawisze:

Inaczej niż na obrazku 2, instalacja jest uruchamiana

Następnie kliknij Odśwież w menu skrótów Dostawcy:

Bardzo szybko utworzyłem prosty plik xslx:

W SQL Server utwórz połączony serwer na tym Excelu:

if exists (select 1 from sys.servers where 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=Yes'

Skrypt 1

Przeczytaj:

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

Skrypt 2

Czy to się udaje? Nie!

Msg 7399, poziom 16, stan 1, wiersz 1
Dostawca OLE DB «Microsoft.ACE.OLEDB.12.0» dla serwera połączonego «XlsLnkSrv» zgłosił błąd. Dostawca nie podał żadnych informacji o błędzie.
Msg 7303, Poziom 16, Stan 1, Wiersz 1
Nie można zainicjować obiektu źródła danych dostawcy OLE DB «Microsoft.ACE.OLEDB.12.0» dla połączony serwer «XlsLnkSrv».

Mimo wszystko to się udało!

Podobnie,

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

Najpierw musimy wykonać następujące czynności:

exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries', 1;
reconfigure

Skrypt 3

Podsumowując, chciałbym zauważyć, że dostawca 64-bitowy zastąpił dostawcę 32-bitowego. Jeśli utworzymy połączenie dla Sample.xslsx w przepływie danych pakietu DTS, otrzymamy niepowodzenie inicjalizacji dostawcy Microsoft Office 12.0 Access Database Engine OLE DB, co jest logicznie poprawne, ponieważ devenv.exe jest 32-bitowy, podczas gdy dostawca jest 64-bitowy. Aby przywrócić zachowanie, konieczne jest przywrócenie 32-bitowego dostawcy pakietu Office (tutaj). Jednak w tym przypadku nie możemy korzystać z połączonego serwera. Aby serwer linkowany działał, przejdź do początku artykułu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL Pivot bez funkcji agregującej

  2. Jaki jest najlepszy sposób na pisanie wielką literą każdego słowa w ciągu w SQL Server

  3. Używasz wyniku wyrażenia (np. wywołania funkcji) na liście parametrów procedury składowanej?

  4. Jak znaleźć sortowanie w SQL Server (T-SQL)

  5. Zwróć wartość przyrostu kolumny tożsamości w SQL Server