Fehler beim Konvertieren von Datentypen beim Importieren von Excel nach SQL Server 2008

8

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.

Ссылка

    
wootscootinboogie 21.03.2012, 16:03
quelle

6 Antworten

9

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:

  • Ändern Sie den Zieldatentyp in float
  • Laden Sie mit dem Import-Assistenten in eine 'Staging'-Tabelle mit dem Datentyp float und dann INSERT mit CAST oder CONVERT in die reale Zieltabelle, um die Daten zu konvertieren
  • Erstellen Sie ein SSIS-Paket und verwenden Sie die Datenkonvertierung Umwandlung, um die Daten zu konvertieren

Sie können auch die Kommentare in der Import-Assistent-Dokumentation zu Datentypzuordnungen notieren .

    
Pondlife 21.03.2012, 16:26
quelle
7

Abgehen von dem, was Derloopkat gesagt hat, was bei der Konvertierung immer noch fehlschlagen kann (nichts für ungut Derloopkat), weil Excel schrecklich ist:

  1. Einfügen von Excel in Notepad und Speichern als normal (.txt-Datei).
  2. Öffnen Sie in Excel die .txt-Datei.
  3. Wählen Sie als nächstes, da es offensichtlich tabulatorgetrennt ist.
  4. Wählen Sie "none" für den Textqualifikator und dann weiter.
  5. Wählen Sie die erste Zeile aus, halten Sie die Umschalttaste gedrückt, wählen Sie die letzte Zeile aus, und wählen Sie die radiale Schaltfläche für den Text aus. Klicken Sie auf Fertigstellen

Es wird geöffnet, überprüfen Sie es, um sicherzustellen, dass es genau ist und speichern Sie dann als eine Excel-Datei.

    
JackArbiter 14.08.2013 22:15
quelle
3

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:

  1. Erstellen Sie eine neue Excel-Tabelle mit dem Namen der Spalten in der ersten Zeile
  2. Formatieren Sie die Spalten als Text
  3. Fügen Sie die Zeilen ohne Format ein (verwenden Sie das CVS-Format oder kopieren / fügen Sie in den Editor ein, um nur Text zu erhalten)

Beachten Sie, dass das Formatieren der Spalten in einer vorhandenen Excel-Tabelle nicht ausreicht.

    
derloopkat 19.12.2012 13:57
quelle
2

Es gibt eine Problemumgehung.

  1. Importieren Sie Excel-Tabellen mit Zahlen als Float (Standard).
  2. Nach dem Import, Gehe zu Table-Design
  3. Ändern Sie den Datentyp der Spalte von Float in Int oder Bigint
  4. Änderungen speichern
  5. Ändern Sie den Datentyp der Spalte von Bigint in einen beliebigen Texttyp (Varchar, nvarchar, text, ntext usw.)
  6. Änderungen speichern.

Das ist es.

    
Shahbaz 25.11.2014 10:56
quelle
1

Es scheint eine wirklich einfache Lösung zu geben, wenn es um Datentypenprobleme geht.

Fügen Sie am Ende der Excel-Verbindungszeichenfolge ;IMEX=1;"

hinzu %Vor%

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.

    
SQLCodingIsFunnn 17.05.2016 20:58
quelle
0

Ein Workaround, den Sie im Notfall in Betracht ziehen sollten:

  1. Speichern Sie eine Kopie der Excel-Datei, ändern Sie die Spalte, um den Text 'text'
  2. zu formatieren
  3. Kopieren Sie die Spaltenwerte und fügen Sie sie in einen Texteditor ein, speichern Sie die Datei (nennen Sie sie tmp.txt ).
  4. Ändern Sie die Daten in der Textdatei, um mit einem Zeichen zu beginnen und zu enden, damit der SQL Server-Importmechanismus Text erkennt. Wenn Sie einen ausgefallenen Editor haben, verwenden Sie die mitgelieferten Tools. Ich benutze Awk in Cygwin auf meinem Windows-Laptop. Zum Beispiel fange ich am Ende an, den Spaltenwert mit einem einfachen Anführungszeichen zu setzen, zB " $ awk '{print" \ x27 "$ 1" \ x27 "}' ./tmp.txt & gt; ./tmp2.txt "
  5. Kopieren Sie die Daten aus tmp2.txt und fügen Sie sie über die erforderliche Spalte in der Excel-Datei ein und speichern Sie die Excel-Datei
  6. führe den sql-server-Import für deine modifizierte Excel-Datei aus ... stelle sicher, dass der vom Importeur gewählte Datentyp nicht numerisch ist ... falls ja, wiederhole die obigen Schritte mit einem anderen Zeichensatz

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], '' '', '') "

    
Jeff Myles 31.08.2017 15:35
quelle

Tags und Links