Technik einfach und verständlich erklärt.
Sie können nützliches zu einem interessanten Thema berichten? Dann schreiben sie selbst einen Artikel auf Technikpedia!
 
Technik von Profis erklärt
Auf www.technikpedia.de können Sie Informationen zu verschiedenen Themen aus der Technik und Informatik finden. Durch verschiedene Editoren sind die Artikel besonders informativ und aussagekräftig.
Fehler beim Daten Import / Export aus einer Excel-Datei mit dem Microsoft Server Management Studio 10 in eine Microsoft SQL Server 2008 Datenbank
Als ich neulich Daten aus einer Excel-Tabelle in eine MS-SQL-Datenbank importieren wollte, bin ich fast verzweifelt. Mit dem alten SQL Enterprise Server Manager 2000 ging das immer recht einfach. Aber mit den SQL-Tools von 2008 hatte ich so meine Probleme.
Ich nutze den SQL Server-Import/Export-Assistent.
Die Meldungen waren folgende:
– Überprüfung wird ausgeführt (Warnung)
Meldungen
Warnung 0x802092a7: 1-Datenflusstask: Daten werden möglicherweise abgeschnitten, weil Daten aus der [Spaltenname]-Datenflussspalte mit der Länge 255 in die [Spaltenname]-Datenbankspalte mit der Länge 40 eingefügt werden.
(SQL Server-Import/Export-Assistent)
Warnung 0x802092a7: 1-Datenflusstask: Daten werden möglicherweise abgeschnitten, weil Daten aus der [Spaltenname]-Datenflussspalte mit der Länge 255 in die [Spaltenname]-Datenbankspalte mit der Länge 40 eingefügt werden.
(SQL Server-Import/Export-Assistent)
und
– Wird ausgeführt (Fehler)
Meldungen
Fehler 0xc020901c: 1-Datenflusstask: Fehler bei ‚Ausgabespalte ‚[Spaltenname]‘ (21)‘ für ‚Ausgabe ‚Ausgabe der Excel-Quelle‘ (9)‘. Folgender Spaltenstatus wurde zurückgegeben: ‚Der Text wurde abgeschnitten, oder ein oder mehrere Zeichen hatte(n) auf der Zielcodeseite keine Entsprechung.‘.
(SQL Server-Import/Export-Assistent)
Fehler 0xc020902a: 1-Datenflusstask: Fehler bei ‚Ausgabespalte ‚[Spaltenname]‘ (21)‘ aufgrund abgeschnittener Daten. Die Abschneidezeilendisposition in ‚Ausgabespalte ‚[Spaltenname]‘ (21)‘ gibt an, dass der Vorgang bei einem Abschneidefehler nicht ausgeführt werden kann. Es wurde ein Abschneidefehler im angegebenen Objekt der angegebenen Komponente festgestellt.
(SQL Server-Import/Export-Assistent)
Fehler 0xc0047038: 1-Datenflusstask: SSIS-Fehlercode ‚DTS_E_PRIMEOUTPUTFAILED‘. Die PrimeOutput-Methode in ‚Komponente ‚Quelle – Tabelle1$‘ (1)‘ hat den Fehlercode 0xC020902A zurückgegeben. Die Komponente gab einen Fehlercode zurück, als das Pipelinemodul ‚PrimeOutput()‘ aufgerufen hat. Die Bedeutung des Fehlercodes wird von der Komponente definiert. Der Fehler ist jedoch schwerwiegend, und die Ausführung der Pipeline wurde beendet. Möglicherweise wurden bereits Fehlermeldungen veröffentlicht, die weitere Fehlerinformationen beinhalten.
(SQL Server-Import/Export-Assistent)
Ich hatte mit zahlreichen Einstellungen rumprobiert.
Alle Spaltentypen sollten konvertiert werden: Von VarChar nach varchar, von VarChar nach text und von Double nach int (in der Tabelle standen sowieso nur ganze Zahlen).
Wenn Daten zu groß waren (was meiner Meinung nach bei keinem Datensatz der Fall so war) sollten sie abgeschnitten werden und es sollte nicht mit einem Fehler angehalten werden. Auch habe ich die Daten nach Sonderzeichen hin überprüft. („Zeichen haben keine Entsprechung auf der Zielcodeseite“). Eigentlich war alles in Ordnung. Weder waren die Daten zu lang, noch gab es Probleme mit dem Zeichensatz.
Es half alles nichts. Ich konnte die Daten einfach nicht importieren. Des Rätsels Lösung habe ich im Internet direkt auf der Internetseite von Microsoft gefunden.
http://support.microsoft.com/kb/281517/EN-US/ bzw. http://support.microsoft.com/?scid=kb%3Bde%3B281517&x=10&y=12
Beim Importieren von Daten einer Jet OLEDB 4.0 Datenquelle mit Hilfe der „Data Transformation Services (DTS)“ und dem Microsoft OLE DB provider für Jet, was ja hier der Fall ist, kann man folgende Werte in der Registry(!) ändern:
Achtung: Registry vorher sichern und alle Änderungen auf eigene Verantwortung!
Einfach in der Registry des Computers, auf dem der Assistent läuft (der Clientcomputer) den Wert von HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows auf 0 setzen.
Der Wert für TypeGuessRows steht für die Anzahl der Sätze, die von der Excel-Tabelle eingelesen werden sollen, um den Datentyp zu erraten. Wenn das fehl schlägt, dann funktioniert das Importieren nicht.
Gerade bei Feldern mit Texten weiß der Import-Assistent nicht, wie er sie behandeln soll. Bei Texte größer als 255 Zeichen wird der Datentyp „text“ geraten, ansonsten „varchar“. Wenn der Text im Problemfeld in den ersten paar Zeilen nicht länger als 255 Zeichen ist, dann wird der Datentyp varchar geraten und stimmt nicht mit dem Zieldatentyp „text“ überein. In meinem Fall ging es wohl eher um kurzen Text, der in eine Spalte mit der Länge von 40 eingefügt werden sollte. Obwohl kein Datensatz in der entsprechenden Spalte mehr als 40 Zeichen hatte.
Ich hatte auch keine andere Möglichkeit gefunden den Datentyp zu überschreiben. Mit dem Wert bei TypeGuessRows von 0, wird nun scheinbar(!) nicht mehr geraten.
Keine Ahnung, wozu das gut sein soll und warum man das nur in der Registry ändern kann.
Laut der Seite von Microsoft sind in der Registry bei TypeGuessRow nur Werte von 0 bis 16 zulässig. Wenn man den Wert 0 wählt, werden alle Zeilen (bis 16384) eingelesen, um den korrekten Datentyp zu bestimmten. Das Ganze kann bei großen Datenbeständen somit sehr langsam werden. Wer nicht in der Registry rumspielen will, der muss sicherstellen, das in den ersten 8 Datensätzen mindestens einer ist, der den Datentyp am besten ein/ausgrenzt, also in unserem Fall, der im Textfeld mindestens 255 Zeichen enthält.
Auf der Seite von Microsoft steht sogar beschrieben, wie man das Problem nachbauen kann.
Wie gesagt: Keine Ahnung, warum das Importieren aus einer Excel-Datei in meiner Datenkonstellation nur mit einer Einstellungsänderung in der Registry funktioniert. Vielleicht hatte ich auch irgendwo einen Denkfehler. Aber mit diesem Kniff hat es prima funktioniert.
Danke für den Hinweis.
Das gleiche Problem tritt übrings auch beim Import einer csv Datei auf.
Lösung:
Den Regeintrag „TypeGuessRows“ mit dem Wert 0 auch unter
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Text\TypeGuessRows
anlegen.
lg
Sabine
Hallo Sabine,
vielen Dank für deinen Hinweis. Ich denke er wird mir und auch vielen anderen sehr nützlich sein.
—
lg Ben
– Technikpedia Team Member –
Wir suchen ständig neue Gastautoren. Bewerbungen bitte an info [eht] technikpedia.de
Danke für den heißen Tip. Er hat auch geholfen beim Excelimport zu SQL Server 2005. Ichhoffe, Du hast nichts dagegen, wenn ich ihn im Blog erwähne (blog.computer-schroeder.de)
Danke nochmals 🙂
Jörg
Sehr guter Tipp,
vielen Dank!