2012-08-23 12 views
9

Próbuję wprowadzić ten arkusz programu Excel do tabeli, aby można było zastosować do niego instrukcje select itp., Aby zaktualizować tabele informacjami.Pobierz arkusz programu Excel do tabel tymczasowych za pomocą skryptu

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
      'Excel 8.0;Database=C:\PB.xlsx', 
      'SELECT * FROM [Sheet1$]') 

Im uruchomiony 64-bitowy komputer. Nie mam pojęcia, jaka to wersja programu Excel.

Błąd:

Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the error. Msg 7303, Level 16, State 1, Line 1 Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".

Kiedy zmieni się Excel 12,0;

OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned message "Could not find installable ISAM.". Msg 7303, Level 16, State 1, Line 1 Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".

+0

Kiedy dostałem te błędy, powiedziano mi, że to DBA, ponieważ sterownik ten musi być zainstalowany na serwerze. Czy jest zainstalowany na twoim? – Taryn

+0

@bluefeet To jest obecnie mój laptop i nie zainstalowałem niczego dodatkowego, więc jeśli nie jest to w 2008 R2. potem Nie. – Doomsknight

+0

Jakiś czas temu wystąpił błąd 7399 z powodu niekompatybilności sterowników ODBC 32/64 bitów. Próbowałem odczytać dane z arkusza programu Excel do 64 bitów programu SQL Server 2008 R2. Sterownik Microsoft-Jet.OleDB ma 32 bity. Niestety nie mogłem rozwiązać problemu i musiałem zainstalować 32-bitowy serwer do odczytu plików Excela. –

Odpowiedz

8

Istnieje 5 możliwych przyczyn tego błędu.

  1. Silnik odrzutowy musi być zainstalowany na serwerze. Zainstalowanie MS Office na serwerze sortuje to.
  2. Ścieżka do pliku xls odnosi się do serwera, a nie do stacji roboczej, na której uruchomiono komendę od
  3. Konto, które uruchamia usługę serwera SQL, musi mieć uprawnienia do zapisu do folderu, w którym znajduje się xls. Jednym z możliwych rozwiązań jest zmiana zmiennych środowiskowych temp = i tmp = środowiska konta uruchamiania usługi (np. Administratora) na (na przykład) c: \ temp, a następnie włączenie pełnej kontroli na c: \ temp na wszystkich

4 ...

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

5 ....

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

teraz nie wiem, dlaczego to działa, zwłaszcza biorąc pod uwagę, że wszyscy mówią powinny one być ustawione na 1. dla mnie jednak , ustawiając je na zero, zrobili lewę dla następujących statystyk SQL ement na SQL Server 2008R2 32bit i M $ Urzędu 2007

Select * 
into [temp_table$] 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\temp\EXPENDITURE REPORT.xls;HDR=YES;IMEX=1', 
'SELECT * FROM [EXPENDITURE SHEET$]') 

uwaga: celowo używali przykład, w którym zarówno nazwa pliku i nazwa arkusza mieć spacji aby pokazać, że można to zrobić.

+0

Użyłem Plik csv na końcu, Ale oznaczenie to jako poprawne ze względu na dobrą, szczegółową odpowiedź na wiele opcji. – Doomsknight

+1

Jak wspomniano w drugiej odpowiedzi, możesz wypróbować 'Microsoft.ACE.OLEDB.12.0', nawet z' Excel 8.0' –

+0

plus 1 dla używania spacji w nazwach. –

7

przypadku plików XLSX (Excel 2007-2010) można zamiast używać dostawcy ACE OleDB strumienia

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=C:\PB.xlsx', 
    'SELECT * FROM [Sheet1$]'); 
+0

Otrzymuję tę jedną linię 'Nie mogę utworzyć instancji dostawcy OLE DB" Microsoft.ACE.OLEDB.12.0 "dla serwera połączonego" (null) ".' – Doomsknight

+0

Zapomniałem wspomnieć, że musisz mieć zainstalowany pakiet Office 2007+ na serwerze lub ten składnik: http://www.microsoft.com/en-us/download/details.aspx?id=23734 –

+0

Mam biuro 2010 ..: | – Doomsknight

1

wszelki wypadek ktoś natknie się na ten lat później tak jak ja, to co pracował dla mnie:

Mieliśmy pole, które miały SQL Server Express 2012 na maszynie 8 64 bit Windows bez wersji Zainstalowane biuro.

Tutaj jest częścią mojego przechowywanej konfiguracji proc I:

INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=R:\Export Membership Database\Member_Export.xls;', 
'SELECT * FROM [combined$]') 

(reszta SELECT poniżej tego)

Dostałem ten błąd:

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.

Zmieniliśmy konfiguracja:

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

Ran przechowywanej proc ponownie, a następnie dostał ten błąd:

The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

Znaleziony musieliśmy zainstalować to:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang=en

Potem pracował jak urok!

Powiązane problemy