Excel Datei über OPENROWSET öffnen

ukulele

Datenbank-Guru
Beiträge
5.107
Eigentlich sollte das ja funktionieren, eigentlich.

Folgenden Befehl bringe ich auf einem Windows 2003 R2 Server 32 Bit mit MS SQL 2005 Express zum laufen, auf Windows 2008 R2 Server 64 Bit mit MS SQL 2012 Express aber nicht:

Code:
SELECT    *
FROM    OPENROWSET('Microsoft.Jet.OLEDB.4.0',
        'Excel 8.0;HDR=YES;Database=D:\2012.xls',
        'select * from [asdf$]');

Meldung 7302, Ebene 16, Status 1, Zeile 1
Eine Instanz des OLE DB-Anbieters 'Microsoft.Jet.OLEDB.4.0' für den Verbindungsserver '(null)' kann nicht erstellt werden.

Auf beiden Systemen ist kein Excel installiert, auf dem neuem aber OpenOffice, auch wenn das nichts damit zu tun haben sollte. Die Datei ist nicht geöffnet, sp_configure habe ich durchgeführt. Überhaupt habe ich allerhand ausprobiert was auch hier steht: http://www.experts-exchange.com/Mic...rieving-Data-From-Excel-Using-OPENROWSET.html

Hat noch jemand Anregungen?
 
Werbung:
Hi,

ich habe noch nicht viel mit SQL Server 2012 gearbeitet (kommt erst noch), aber unterstützt dieser überhaupt noch Jet 4.0?
Hast du mal nachgeschaut, ob der Anbieter für diesen Zugriffstreiber überhaupt auf dem SQL Server angeboten wird bzw. installiert ist?

Viele Grüße,
Tommi
 
Irgendwo scheint der SQL Server aber einen Teil des Ausdrucks als Verbindungsserver-Angabe zu interpretieren.
In den Beispielen auf der MSDN wird auch der Pfad zur Datei anders angegeben. Vielleicht hängt das daran (?-> Gleichheitszeichen im Ausdruck)

Hier ist nochmal der Link zur Beschreibung des OPENROWSET-Befehls (T-SQL 2012)
http://msdn.microsoft.com/de-de/library/ms190312.aspx

Da sind ganz unten Beispiele für Access angegeben, aber die sollten ja auch für Excel gelten.
Vielleicht versuchts du es mal mit einer ganz einfachen Version des Ausdrucks, wie in den Beispielen angegeben.
 
Hi,

ich habe hierzu noch was gefunden:

The SQL Server Error Message if a user have no rights for SQL Server TEMP directory

OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned message "Unspecified 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)".
 
Also der Link http://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm hat mir schonmal geholfen. Ich hatte nicht bedacht das der SQL Server auch 64 Bit ist, ich also auch für Excel 2003 Dateien die OLEDB 12 Erweiterung nehmen muss! Außerdem habe ich noch AccessDatabaseEngine_X64 wie beschrieben installieren müssen.

Komisch ist auch, das er mit Leerschritten im Datenblattnamen offensichtlich ein Problem hat. Auf meinem alten SQL Server klappt das problemlos, auf dem neuen unter OLEDB 12 behauptet er, es gäbe das Datenblatt nicht.
Code:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0;Database=D:\2013.xls', [Sheet Caption$])
Meldung 7314, Ebene 16, Status 1, Zeile 1
Der OLE DB-Anbieter 'Microsoft.ACE.OLEDB.12.0' für den Verbindungsserver '(null)' enthält die Sheet Caption$-Tabelle nicht. Die Tabelle ist nicht vorhanden, oder der aktuelle Benutzer besitzt keine Berechtigungen für diese Tabelle.
 
Werbung:
Ich hatte das Thema grade wieder auf einem neuen Server (MS 2012 R2 64 Bit, SQL Express 2014 64 Bit, Office 2013 Standard 32 Bit) und kann ergänzend sagen:

Neustart nach Installation Microsoft Access database engine 2010 (English)
Code:
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
RECONFIGURE WITH OVERRIDE
GO
haben bei mir das ganze offensichtlich erst zum Laufen gebracht.
Quelle: Reading Access 2010 .mdb files from SQL Server directly - elbsolutions.com Project List & Blog

Das ganze Thema ist echt ein Grauss.
 
Zurück
Oben