SSIS-Import von Datum und Zeit aus einer txt in eine Tabelle datetime

So, ich möchte import datetime aus einem txt:

2015-01-22 09:19:59

in eine Tabelle mit einem Datenfluss. Ich habe meine Flat-Source-Datei und meinem Ziel-DB einrichten in Ordnung. Ich habe die Daten geben für die txt-Eingabe für die Spalte in die erweiterten Einstellungen und die input-und output-Eigenschaften:

Datenbank timestamp [DT_DBTIMESTAMP]

Dies ist der gleiche Datentyp wie die DB für die Tabelle, so sollte dies funktionieren.

Allerdings, wenn ich das Paket auszuführen, bekomme ich eine Fehlermeldung besagt, dass die Daten-Konvertierung fehlgeschlagen... Wie kann ich dies möglich machen?

[Import txt data [1743]] Error: Data conversion failed. The data conversion for column "statdate" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".

[Import txt data [1743]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "output column "statdate" (2098)" failed because error code 0xC0209084 occurred, and the error row disposition on "output column "statdate" (2098)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.

[Import txt data [1743]] Error: An error occurred while processing file "C:\Program Files\Microsoft SQL Server\MON_Datamart\Sourcefiles\tbl_L30T1.txt" on data row 14939.

In der Zeile er den Fehler den datetime-aufgefüllt mit Leerzeichen. das ist der Grund, warum auf dem Tisch der "null zulassen" ist aktiviert aber mein SSIS-Paket gibt den Fehler aus irgendeinem Grund... kann ich irgendwo sagen, das Paket zu Nullen zulassen, aswell?

  • timestamp <> datetime
  • Was meinst du? Es sagt, "datetime", die auf den Datentyp in der Tabelle selbst, Und wenn ich überprüfen die Zuordnungen, die in der OLE DB-Ziel der Ziel-Spalte sagt die Datenbank timestamp. Dieser arbeitete in einem DTS-Paket (ich bin umwandeln) -> Zeitstempel = datetime
  • In SQL Server haben wir die Datentypen datetime und timestamp (msdn.microsoft.com/en-us/library/ms187752.aspx). Entschuldige bitte, ich wusste gar nicht, dass Sie im SSIS - DT_DBTIMESTAMP zugeordnet datetime, wie die Namenskonvention ist nicht konsistent mit T-SQL.
  • Ja, ich verstehe gut, wie es scheint, tut es, da es deutlich sagt: "Datenbank timestamp" in die Spalte "Ziel" auf das OLE DB-Ziel. Haben Sie irgendwelche Vorschläge, was mein problem sein könnte und wie es zu lösen? Vielleicht ist die Konvertierung der Daten in Ordnung ist, aber dieser Fehler zeigt sich, da die Räume auf bestimmte Zeilen in der txt-Datei? Kann ich es akzeptieren null-Werte in einer bestimmten Spalte irgendwo, um zu verhindern, dass es wirft einen Fehler auf der leeren Zeilen?
  • Vielleicht gibt es eine chance, dass das OLE DB-Ziel ist das Lesen der falschen Datentyp aus der Tabelle? Denn die Optionen, die ich habe für die Daten-Typen sind, und ich sehe nicht, datetime überall... imgur.com/YBNuOru Also, vielleicht ist es das Lesen nur der Daten-Typen von SSIS-weiß wich nicht enthalten datetime
  • Können Sie dump die Werte der CSV in einem varchar-Feld vorübergehend, so können die Daten abgefragt werden? Es ist möglich, dass Sie einen Tag haben, wie 2015-02-00... (d.h. ein ungültiges Datum) oder 2015-02-12 14:37:39.123456 (d.h. die Präzision höher ist als der Datentyp zulässt... oder ähnliches
  • Ich würde-Ausgabe, die Spalte als Zeichenfolge geben Sie die Quelle und senden Sie es zu einem Datentyp-Konvertierung Komponente mit einem Fehler-Ausgang, so konnte ich sehen, was Werte sind nicht in der Lage zu sein, in Datumsangaben umgewandelt. Das würde wahrscheinlich geben einen guten Hinweis darauf, was Los ist.
  • gvee, wie ich schrieb in meiner ursprünglichen Frage es ist so: 2015-01-22 09:19:59
  • Tab, das habe ich schon, aber ich ersetzt die Datentyp-Konvertierung durch die Anpassung der Datentypen, die in der Wohnung Quelldatei. Das funktioniert und gibt mir den gleichen Fehler (siehe meine ursprüngliche Frage für den Fehler, über das, was Werte nicht te umgewandelt werden)
  • Ich habe gerade überprüft die original DTS-Datei und fand heraus, was das problem ist. Einige Zeilen der statdate Spalte in der TXT-Datei, die ich importieren sind leer. Sie haben nicht den Wert wie der rest (2015-01-22 09:19:59), sondern die Zeile in dieser Spalte ist gefüllt mit LEERZEICHEN. Das DTS-Paket hatte ein activeX-Skript, um zu verhindern, dass diese Werte filles mit Leerzeichen an die Datenbank geschickt werden und damit den Wert "NULL". Dies ist das script: If (IsDate(Trim(DTSSource("statdate")))) Dann DTSDestination("statdate") = DTSSource("statdate") End If Main = DTSTransformStat_OK
  • Ich brauche eine Lösung erkennen, wenn es Leerzeichen anstelle eines Zeitstempels und wenn es Räume (string) anstelle von timestamp-es sollte NICHT gesendet, das an den OLE DB-Ziel, so bekommt es den Wert "NULL". Was lege ich zwischen meine Flatfile-Quelle und der OLE DB abzufangen, in diese Räume und schickte Sie NULL statt? Ich wäre in der Lage, dies zu tun mit einem Ausdruck, aber wie kann ich einen Ausdruck zwischen den in meine DATEN FLIEßEN
  • Wenn ich wählen Sie die Spalte mit dem Zeitstempel im inneren und setzen Sie den error-Ausgang auf "Fehler ignorieren" es FUNKTIONIERT, es sendet alle Zeitstempel auf die Tabelle und die Zeilen mit Leerzeichen anstelle eines Zeitstempels zu bekommen ignoriert und er die Ausgänge "NULL" (das ist die Ausgabe, die ich will)! Jetzt brauche ich nur jemanden, der mir hilft und mir sagen, wie ich ihn ignorieren die Zeilen mit Leerzeichen mit einem expresion oder was auch immer funktioniert in den Datenfluss, so dass ich nicht brauchen, um es auf ingore scheitern, da, wenn etwas anderes dann das Leerzeichen ist falsch, ich muss noch einen Fehler, so dass der controll-flow erstellen Sie eine Sicherungskopie der Datei...
  • Hallo Michael. Um ehrlich zu sein, mein Ansatz wäre zum importieren in ein character-Feld, und dann analysieren, sobald die Seite geladen wurde mithilfe von T-SQL. Aber das ist nur meine bevorzugte Methodik im ETL-Zeug. Wenn Sie wirklich wollen, zu bewältigen, dass es auf dem Weg mit Ihrem ActiveX-Skript, dann müssen Sie erweitern Ihre Prüfung (Stell ich mir IsDate() ist Rückgabe von true für leere Werte). Versuchen: If (IsDate(Trim(DTSSource("statdate"))) And Trim(DTSSource("startdate")) <> "" ) Then .... Lassen Sie mich wissen, wie Sie auf (tag mir in einem Kommentar durch Eingabe von @gvee)
  • Man könnte ein TRIM () - Funktion in der Daten-Konvertierung und einer IIF() zu ersetzen, die leere Zeichenfolgen mit NULL.
  • Wie würde ich importieren Sie Sie in ein character-Feld, und tun es mit T_SQL? Wenn es funktioniert, ich bin offen dafür. Aber das script das du mir mit würde wahrscheinlich funktionieren, aber die Frage bleibt, wo ich schreiben kann das Skript? Kann ich nicht ein Skript Aufgabe innerhalb eines data-flow (dies ist nur möglich in der controll flow), so dass ich nicht weiß, wo man eigentlich schreiben, dass ein Skript in die Daten fließen... Auch ich weiß nicht, was <> "" würde funktionieren, da die Zeilen, ich muss abgelehnt werden, nicht leer ( "" ), aber Sie Leerzeichen enthalten. Ich brauche es zu erkennen Leerstellen.
  • Wo würde ich die trim-Funktion? Ich kann nirgendwo finden, um es in der Daten fließen...

InformationsquelleAutor Michael843 | 2015-02-12
Schreibe einen Kommentar