Jedes Mal, wenn ich versuche, eine Excel-Datei in SQL Server zu importieren, erhalte ich einen bestimmten Fehler. Wenn ich versuche, die Zuordnungen zu bearbeiten, ist der Standardwert für alle numerischen Felder float. Keines der Felder in meiner Tabelle hat Dezimalstellen in ihnen und sie sind kein Geld-Datentyp. Sie sind nur 8 Ziffern. Da ich jedoch nicht möchte, dass mein Primärschlüssel als Float gespeichert wird, wenn es ein Int ist, wie kann ich das beheben? Es gibt mir einen Trunkierungsfehler, ich poste bei Bedarf eine Screen Cap. Ist das ein häufiges Problem?
Es sollte beachtet werden, dass ich Excel 2007-Dateien nicht importieren kann (ich denke, ich habe das Problem gelöst), aber selbst wenn ich versuche, .xls-Dateien zu importieren, wird jeder Wert, der Zahlen enthält, automatisch als Float importiert und wann Ich versuche es zu ändern Ich erhalte einen Fehler.
SSIS konvertiert Datentypen nicht implizit, Sie müssen dies also explizit tun. Der Excel-Verbindungsmanager kann nur einige Datentypen verarbeiten und versucht anhand der ersten Zeilen der Datei eine optimale Schätzung zu treffen. Dies ist vollständig dokumentiert in der SSIS-Dokumentation.
Sie haben mehrere Möglichkeiten:
INSERT
mit CAST
oder CONVERT
in die reale Zieltabelle, um die Daten zu konvertieren Sie können auch die Kommentare in der Import-Assistent-Dokumentation zu Datentypzuordnungen notieren .
Abgehen von dem, was Derloopkat gesagt hat, was bei der Konvertierung immer noch fehlschlagen kann (nichts für ungut Derloopkat), weil Excel schrecklich ist:
Es wird geöffnet, überprüfen Sie es, um sicherzustellen, dass es genau ist und speichern Sie dann als eine Excel-Datei.
Wenn Excel gemischte Datentypen in derselben Spalte findet, wird das richtige Format für die Spalte geschätzt (die Mehrheit der Werte bestimmt den Typ der Spalte), und alle anderen Werte werden durch Einfügen von NULLs gelöscht. Aber Excel tut es sehr schlecht (zB wenn eine Spalte als Text betrachtet wird und Excel eine Zahl findet, dann entscheidet, dass die Nummer ein Fehler ist und stattdessen NULL einfügen, oder wenn Zellen mit Zahlen "Text" formatiert sind, kann man NULL Werte bekommen in eine Integer-Spalte der Datenbank).
Lösung:
Beachten Sie, dass das Formatieren der Spalten in einer vorhandenen Excel-Tabelle nicht ausreicht.
Es gibt eine Problemumgehung.
Das ist es.
Es scheint eine wirklich einfache Lösung zu geben, wenn es um Datentypenprobleme geht.
Fügen Sie am Ende der Excel-Verbindungszeichenfolge ;IMEX=1;"
Dadurch werden Probleme mit dem Datentyp behoben, z. B. Spalten, in denen Werte mit Text und Zahlen vermischt sind.
Um zur Verbindungseigenschaft zu gelangen, klicken Sie mit der rechten Maustaste auf den Excel-Verbindungsmanager unterhalb des Kontrollflusses und wählen Eigenschaften. Im Lösungs-Explorer wird es rechts angezeigt. Hoffe das hilft.
Ein Workaround, den Sie im Notfall in Betracht ziehen sollten:
Die Daten in der Datenbank enthalten die Anführungszeichen, sobald der Import abgeschlossen ist ... Sie können die Daten später aktualisieren, um die Anführungszeichen zu entfernen, oder die Funktion "Ersetzen" in Ihrer Leseabfrage verwenden, z. B. "" replace ([dbo]. [MeineTabelle]. [MeineSpalte], '' '', '') "
Tags und Links sql-server sql-server-2008