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).
Flat File Source
- liest die CSV-Zeilen.Derived Column
- macht momentan nichts (es ist nur zum experimentieren da).Data Conversion
- macht momentan nichts (es ist nur zum experimentieren da).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 Connection
Funktion "Typen vorschlagen" für die fehlerhafte Spalte zu verwenden. Dadurch wurde derSingle byte signed int
Datentyp 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 Column
die Spalte mit a in eine zu verwandelnDT_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 Conversion
Wert meiner Spalte mit a in a umzuwandelnDT_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."
- Hält bei mir an
- 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 am Ziel.
- Ich habe versucht, eine Verbindung über einen Excel Source-Connector mit und ohne die
IMEX=1
zur 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.
quelle
Amount
?Amount
Spalte aus. Machen Sie einen Screenshot und aktualisieren Sie Ihre Frage mit diesem Bild.Antworten:
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.
quelle
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.
quelle