it-swarm.com.de

Der Wert konnte aufgrund eines möglichen Datenverlusts nicht konvertiert werden

Lassen Sie mich zunächst klarstellen, dass dies weder eine doppelte Frage noch eine mögliche doppelte Frage ist. Ich habe versucht, jede Antwort auf jede einzelne Variante dieses Problems in StackOverflow und DBA Stack Exchange ohne Glück zu implementieren.

Ich habe in den letzten zwei Tagen mit diesem Problem zu kämpfen (ich arbeite ungefähr 7 Stunden am Tag daran), und selbst nachdem ich das Problem gegoogelt habe, scheint es, dass niemand sonst genau die gleiche Variante meines Problems hat.

Was versuche ich zu tun?

In SSIS versuche ich, aus einer CSV-Datei zu lesen und die Zeilen daraus in eine OLE DB-Datenbank) einzufügen. Dafür habe ich die einfachste Einrichtung aller Zeiten vorgenommen (siehe unten).

  1. Flat File Source - liest die CSV-Zeilen.
  2. Derived Column - macht derzeit nichts (es ist nur zum Experimentieren da).
  3. Data Conversion - macht derzeit nichts (es ist nur zum Experimentieren da).
  4. OLE DB Destination - speichert die Zeilen in der Datenbank.

Wenn ich versuche, es auszuführen, wird die Ausführung an meinem OLE DB-Ziel mit der folgenden Fehlermeldung beendet.

Bei der Eingabe "OLE DB Destination Input" (51) ist ein Fehler mit der Eingabespalte "Amount" (187) aufgetreten. Der zurückgegebene Spaltenstatus lautete: "Der Wert konnte aufgrund eines möglichen Datenverlusts nicht konvertiert werden.".

Die Spalte, die fehlschlägt (Amount), ist derzeit vom Typ DT_STR. Es scheint der Typ zu sein, an den ich momentan am meisten glaube.

Was habe ich versucht?

  • Ich habe versucht, die Funktion "Typen vorschlagen" von Flat File Connection Für die fehlerhafte Spalte zu verwenden. Aus diesem Grund wurde der Datentyp Single byte signed int Empfohlen.
    • Stoppt bei my Flat File Source .
    • Der Fehler ist Datenkonvertierung fehlgeschlagen. Die Datenkonvertierung für die Spalte "Betrag" ergab den Statuswert 2 und den Statustext "Der Wert konnte aufgrund eines möglichen Datenverlusts nicht konvertiert werden."
  • Ich habe versucht, mit Derived Column Die Spalte in einen DT_I4 Umzuwandeln.
    • Stoppt bei meiner abgeleiteten Spalte .
    • Der Fehler ist Datenkonvertierung fehlgeschlagen. Die Datenkonvertierung für die Spalte "Betrag" ergab den Statuswert 2 und den Statustext "Der Wert konnte aufgrund eines möglichen Datenverlusts nicht konvertiert werden."
  • Ich habe versucht, mit Data Conversion Den Wert meiner Spalte in DT_I4 Umzuwandeln.
    • Stoppt bei my Data Conversion.
    • Der Fehler ist Datenkonvertierung fehlgeschlagen. Die Datenkonvertierung für die Spalte "Betrag" ergab den Statuswert 2 und den Statustext "Der Wert konnte aufgrund eines möglichen Datenverlusts nicht konvertiert werden."
  • Ich habe versucht, die Länge meines DT_STR - Werts in der Quelle und im Ziel zu ändern.
    • Stoppt je nach Einstellung an der Quelle oder dem Ziel.
  • Ich habe versucht, eine Verbindung über einen Excel Source-Connector stattdessen mit und herzustellen, ohne dass IMEX=1 Zur Verbindungszeichenfolge hinzugefügt wurde. Kein Glück.

Mein Programmiersinn sagt mir, dass ich geschraubt bin. Ich bin noch nie auf ein so großes Problem für eine so einfache Sache gestoßen.

Und warum kann ich den "potenziellen" Datenverlust nicht einfach ignorieren ? Es ist wirklich frustrierend, um es gelinde auszudrücken.

Mein System

Es ist ein Windows Server 2008 R2-Computer, auf dem SQL Server 2008 installiert ist. Der Computer selbst wird über Windows Update vollständig aktualisiert.

Ich bin einige Male darauf gestoßen und das Problem war eine Nichtübereinstimmung der Datentypen in den Export-/Importparametern. Überprüfen Sie zunächst diese Parameter, indem Sie mit der rechten Maustaste auf Quelle oder Ziel klicken und Erweiterten Editor auswählen. Gehen Sie zu Eingabe- und Ausgabeeigenschaften und überprüfen Sie den Datentyp für diese Spalte für alle Elemente - sowohl Extern als auch Ausgabe und Eingabe. Ich habe hier normalerweise eine Varianz gesehen, oft ist eine Unicode (WSTR) und die andere I4 oder DSTR.

3
Mike

Fehler ignorieren

Zunächst sollten Sie in der Lage sein, das Abschneiden von Zeichenfolgen zu ignorieren, indem Sie zu Ihrer Flatfile-Quelle, Fehlerausgabe, wechseln und dann "Fehlerkomponente" unter "Abschneiden" in "Fehler ignorieren" ändern.

Bessere Lösung

Das eigentliche Problem könnte sein, dass die Zeichenfolgenlänge in der SSIS-Pipeline immer noch falsch ist, da sie zu einem früheren Zeitpunkt initialisiert wurde.

Sie können feststellen, ob dies der Fall ist, indem Sie in Ihrer Flatfile-Quelle (oder nach der Konvertierung abgeleiteter Spalten/Daten) auf den grünen Pfeil doppelklicken und "Metadaten" auswählen. Dort können Sie die Länge des Feldes innerhalb der Pipeline sehen.

Wenn Sie oft gesehen haben, dass Metadaten nicht mehr mit der Quellkomponente übereinstimmen, meistens, wenn Sie die Flatfile-Quelle UND ihre entsprechende Verbindung über den Assistenten erstellen.

Mein Vorschlag wäre, die Verbindung und die Flat File-Quelle zu löschen und neu zu erstellen, da ich keine Möglichkeit gefunden habe, Pipeline-Metadaten mit Quellkomponenten neu zu synchronisieren.

8
Oliver Rahner