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

12

Lassen Sie mich zunächst klarstellen, dass dies weder eine doppelte 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 das einfachste Setup aller Zeiten vorgenommen (siehe unten).

  1. Flat File Source - liest die CSV-Zeilen.
  2. Derived Column - macht momentan nichts (es ist nur zum experimentieren da).
  3. Data Conversion - macht momentan 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 Flat File ConnectionFunktion "Typen vorschlagen" für die fehlerhafte Spalte zu verwenden. Dadurch wurde der Single byte signed intDatentyp empfohlen .
    • Stoppt an meiner Flat File-Quelle .
    • Der Fehler ist, dass die Datenkonvertierung fehlgeschlagen ist. 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, Derived Columndie Spalte mit a in eine zu verwandeln DT_I4.
    • Stoppt an meiner abgeleiteten Spalte .
    • Der Fehler ist, dass die Datenkonvertierung fehlgeschlagen ist. 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, den Data ConversionWert meiner Spalte mit a in a umzuwandeln DT_I4.
    • Hält bei mir an Data Conversion.
    • Der Fehler ist, dass die Datenkonvertierung fehlgeschlagen ist. 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_STRWerts in der Quelle und im Ziel zu ändern .
    • Stoppt je nach Einstellung an der Quelle oder am Ziel.
  • Ich habe versucht, eine Verbindung über einen Excel Source-Connector mit und ohne die IMEX=1zur Verbindungszeichenfolge hinzugefügte Zeichenfolge herzustellen. Kein Glück.

Mein Programmiersinn sagt mir, dass ich geschraubt bin. Ich habe noch nie jemals so ein großes Problem für eine solche einfache Sache anzutreffen.

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.

Mathias Lykkegaard Lorenzen
quelle
Scheint, als hätte ich dieses Problem mit einem Wert (obwohl ich von Access gezogen habe) und ich musste eine bestimmte Codepage verwenden, als ich die Spalte umwandelte. Ich habe keinen Zugriff mehr auf das SSIS-Paket, um zu überprüfen, was ich getan habe.
Was ist der Datentyp der Spalte, in die Sie einfügen möchten Amount?
Jon of All Trades
2
Öffnen Sie Ihren Flat File Connection Manager für die CSV. Gehen Sie zur Registerkarte Erweitert und wählen Sie die AmountSpalte aus. Machen Sie einen Screenshot und aktualisieren Sie Ihre Frage mit diesem Bild.
Billinkc
Hatten Sie schon Gelegenheit, sich den Verbindungsmanager anzusehen?
Billinkc
1
Ich glaube nicht, dass Sie verrückt sind, aber ohne die Definition Ihres Verbindungsmanagers zu sehen, ist es unmöglich zu sagen.
Billinkc

Antworten:

3

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.

Mike
quelle
7

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.

Oliver Rahner
quelle
2
Dies fällt jedoch nicht unter "Kürzung". Ich habe es schon versucht.
Mathias Lykkegaard Lorenzen