2009-08-26 18 views
6

Schon seit einiger Zeit untersucht, und immer wieder eine Ziegelmauer schlagen. Ich importiere aus xls-Dateien über den OpenRowset-Befehl in temporäre Tabellen. Jetzt habe ich ein Problem, wo ich versuche, eine bestimmte Spalte zu importieren, hat einen Bereich Werte, aber die am häufigsten sind die folgenden. Spalten, die als lange Zahlen, d. H. 15598 und die einige Spalten als Zeichenfolgen, d.h. 15598-E, strukturiert sind.OpenRowSet-Befehl in TSQL gibt NULLEN zurück

Nun liest das Openrowset die String-Version kein Problem, meldet aber die Versionsnummer als NULL. Ich habe gelesen (http://www.sqldts.com/254.aspx), dass Openrowset dieses Problem hat und der Autor spricht von der Implementierung von "HDR = YES; IMEX = 1" in die Abfragezeichenfolge, aber das funktioniert überhaupt nicht für mich.

Haben alle von euch das schon einmal erlebt?

Nur noch ein paar Infos. Ich kann tun dies nicht mit dem JET-Motor (Microsoft.Jet.OLEDB.4.0), so das ist, was meine Frage wie folgt aussieht:

SELECT * 
FROM 
    OPENROWSET('MSDASQL' 
       , 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;' 
      , 'SELECT * FROM [Sheet1$]') 
+2

Jetzt wissen Sie, warum ETL-Leute Excel für Importe hassen! – HLGEM

Antwort

6

Ich bemerke, dass Sie den Excel-ODBC-Treiber verwenden. Haben Sie den JET OLEDB Provider mit der entsprechenden Verbindungszeichenfolge ausprobiert?

select * from openrowset(
    'Microsoft.Jet.OLEDB.4.0', 
    'Data Source=C:\ImportFile.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"', 
    'SELECT * FROM [Sheet1$]') 

EDIT: Sorry, habe gerade bemerkt, Ihren letzten Absatz. Sicher geht der Excel ODBC-Treiber immer noch über die JET-Engine, welchen Unterschied würde es also machen?

EDIT: Ich habe den Link KB194124 angeschaut, und die Registry-Werte, die es empfiehlt, sind die Standardwerte auf meiner Maschine, die ich nie geändert habe. Ich habe die obige Methode mehrmals selbst ohne Probleme benutzt. Vielleicht ist es ein Umweltproblem?

+0

kein problem, überprüfen sie http://stackoverflow.com/questions/1178243/what-ist-die-unterschied-zwischen-odbc-and-oledb für weitere informationen – StevenMcD

+0

danke! Ich schätze das wirklich! – StevenMcD

+0

+1. Ein Jahr danach wurde es gepostet und es löste das selbe Problem für mich. – 8kb

1

Wir über die gleiche Frage gekommen. Leider haben wir auch keine Lösung gefunden. Es gibt weitere Informationen here, die angibt, dass möglicherweise ein Registrierungsupdate vorhanden ist.

+0

cool, danke für den link – StevenMcD

2

Wenn Sie nichts dagegen haben, die Datei in Excel öffnen, die Spalten nehmen, die das Problem haben, die Spalte auszuwählen, und tut

Daten -> Text in Spalten -> Weiter -> Weiter -> Text Verwendung von CSV-Dateien anstelle von Excel geöffnet, indem sie einen Verbindungsserver, und die Einrichtung das Format der Dateien

Speichern sie die Tabelle, und sie sollten alle kommen in als Text in OPENROWSET

ich habe festgestellt, in schema.ini ein praktischerer Ansatz für den Umgang mit solchen Importen, mit dieser Methode können Sie erklären Wählen Sie das Format jeder Spalte.

0

Ich hatte das gleiche Problem. Ich habe es behoben, indem ich eine Zeile, die eine Spalte mit dem string/numerischen Wert (zB 123ABC) in der ersten Zeilenposition des Blattes enthält, ausschneide und wieder einfüge. Aus irgendeinem Grund liest T-SQL die erste Zeile und nimmt an, dass alle Werte numerisch sind.

0

Antwort von SqlACID in diesem Link hat super funktioniert [https://wikigurus.com/Article/Show/185717/OpenRowSet-command-in-TSQL-is-returning-NULLS]: -

Wenn Sie nichts dagegen haben die Datei in Excel öffnen, die Spalten nehmen, die das Problem haben, wählen Sie die Spalte, und tun

Daten -> Text in Spalten -> Weiter -> Weiter -> Text

Speichern sie die Tabelle, und sie sollen alle kommen in als Text in OPENROWSET

ich habe festgestellt, Dateien mit .CSV anstelle von Excel, geöffnet von einen Verbindungsserver einrichten, und das Einrichten des Formats der Dateien in schema.ini ist ein praktischerer Ansatz für den Umgang mit solchen Importen. Mit dieser Methode können Sie das Format jeder Spalte explizit auswählen.

Verwandte Themen