Nie można utworzyć instancji OLE DB provider Microsoft.Jet.OLEDB.4.0 Dla linked server null

Próbuję wyeksportować z moich danych Table do Excel poprzez T-SQL zapytanie. Po małych badaniach wpadłem na to

INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 
                        'Excel 8.0;Database=G:\Test.xls;', 
                        'SELECT * FROM [Sheet1$]') 
SELECT * 
FROM   dbo.products 

Gdy wykonam powyższe zapytanie otrzymuję ten błąd

Msg 7302, poziom 16, Stan 1, linia 7 nie może utworzyć instancji OLE DB provider " Microsoft.Jet.OLEDB.4.0 " Dla linked server "(null)".

Więc poszedł przez internet dla rozwiązania, dostał poniższy link

Https://blogs.msdn.microsoft.com/spike/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message-unspecified-error/

W powyższym linku mówili, że musimy być administratorem, aby utworzyć folder na dysku C TEMP folder ponieważ OPENROWSET tworzy niektóre pliki lub folder wewnątrz TEMP folder

Robię to w moim domowym komputerze i jestem administratorem. Nadal dostaję ten sam błąd.

SQL Serwer szczegóły

Microsoft SQL Server 2016 ( RC1) - 13.0.1200.242 (X64) Mar 10 2016 16: 49: 45 Copyright (c) Microsoft Corporation Enterprise Evaluation Wersja 64-bitowa na Windows 10 Pro 6.3 (Build 10586: )

Wszelkie wskazówki, aby rozwiązać problem, będą wysoko cenione

Update: już skonfigurowałem Ad Hoc Distributed Queries i

Wykonano poniższe zapytania

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 

Teraz dostaję ten błąd

Msg 7438, poziom 16, Stan 1, linia 7 32-bitowy dostawca OLE DB "Microsoft.Jet.OLEDB.4.0" nie można załadować w procesie na 64-bitowym SQL Serwer.

Author: Pரதீப், 2016-05-02

4 answers

Mam MS SQL server 2012 i Office 2013. Wydaje się to być bardzo wybredne, więc być może będziesz musiał dostosować się do swoich konkretnych wersji.

  1. Pobierz Microsoft.ACE.OLEDB.12.0 Dla Windows, Wersja 64 bitowa znajduje się tutaj: https://www.microsoft.com/en-us/download/details.aspx?id=13255
  2. zainstaluj go na swoim serwerze.
  3. Sprawdź użytkownika uruchamiającego SQL Server i upewnij się, że użytkownik ma dostęp do katalogu temp C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp jeśli jest to konto usługi lokalnej lub C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp jeśli to konto sieciowe.
  4. Skonfiguruj 'rozproszone zapytania Ad Hoc' i Włącz pliki Microsoft.ACE.OLEDB w następujący sposób:

Oto komendy SP_CONFIGURE:

SP_CONFIGURE 'show advanced options', 1; 
GO 
RECONFIGURE; 
SP_CONFIGURE 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1

Na nowszym SQL Server 2014 użyłeś 'DynamicParameters' zamiast 'DynamicParam'

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1

Upewnij się, że zarejestrowałeś msexcl40.dll jak ten:

regsvr32 C:\Windows\SysWOW64\msexcl40.dll
 42
Author: quest4truth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-15 19:29:37

Sprawdź sp_configure / RECONFIGURE...

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO

Zobacz te linki, aby uzyskać więcej informacji:

Https://technet.microsoft.com/en-us/library/aa259616(v=sql. 80). aspx

Http://blog.sqlauthority.com/2010/11/03/sql-server-fix-error-ms-jet-oledb-4-0-cannot-be-used-for-distributed-queries-because-the-provider-is-used-to-run-in-apartment-mode/

 2
Author: JimR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 13:44:24

Działa !!! Wielkie dzięki. Tylko dla 64-bitowego serwera Win 2012R2. Pozwól mi umieścić cały działający skrypt częściowo powtarzające się bity z góry, które nie są łatwe (jak dla mnie) do połączenia ze sobą:

1) Pobierz Microsoft.ACE.OLEDB.12.0 Dla Windows, Wersja 64 bitowa znajduje się tutaj: https://www.microsoft.com/en-us/download/details.aspx?id=13255

2) Utwórz plik excel z odpowiednimi kolumnami (w tym przypadku nazwa i klasa).

3) Uruchom kod poniżej:

sp_configure 'show advanced options', 1;  
RECONFIGURE;
GO 
sp_configure 'Ad Hoc Distributed Queries', 1;  
RECONFIGURE;  
GO 

/* -- Not sure commented bits are necessary but I also have run them
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 

-- below two lines failed with: Msg 2787, Level 16, State 1, Procedure sp_MSset_oledb_prop, Line 106 Invalid format specification: '%1!.'.
    EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParam', 1

-- but works all two as below:
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
-- Succeded to run after success with Excel so does not looks like necessary


*/

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 8.0;Database=C:\testing.xlsx;', 
'SELECT Name, Class FROM [Sheet1$]') 
SELECT [Name],[Class] FROM Qry_2
GO
 1
Author: FerroPont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 12:14:37

Wykonaj poniższe zapytania, aby rozwiązać ten problem:

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 1
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 1
GO 
 -3
Author: shrikrishna das,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 09:11:34