Announcement

Collapse
No announcement yet.

Datumsproblem im SSIS

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datumsproblem im SSIS

    Hallo zusammen,
    ich habe ein SSIS-paket wo eine csv. in eine Datenbank geschrieben wird.In der Quelle ist die Datumsspalte ein String [DT_STR],50 und im ziel ist es ein smalldatetime,not null. Ich bekomme ständig Fehler.[OLE DB-Ziel [439]] Error: There was an error with input column "Spalte 5" (481) on input "Eingabe des OLE DB-Ziels" (452). The column status returned was: "The value could not be converted because of a potential loss of data.".
    Kann jemand helfen?

  • #2
    Vieleicht liegts am smalldatetime, schon mal den anderen Datumsformaten als Ziel probiert? Ist die Quelle denn ein Datumsfeld mit Uhrzeit etc?
    Oder du importierst ihn erstmal als WSSTR und wandelst ihn dann im Pakt erst um.

    Comment


    • #3
      das Datumsfeld ist ohne Zeit, 8-stellig(yyyymmdd).Im Ziel kann ich nichts verändern, der Programmierer geht von diesem datentyp nicht ab weil dann noch weitere externe Schritte mit dran hängen die diesen typ verlangen.Wie sieht denn bei Deinem Vorschlag die Expression im Paket aus?Als WSSTR liest er die Daten ja schon mal ein.

      Comment


      • #4
        Hallo skimausi2908,

        SSIS nimmt es mit den Datentypen, Codepages etc. penibel genau.
        Direkt aus dem Ziel in die Quelle kannst Du nur dann schreiben, wenn alles exakt stimmt.

        Ansonsten musst Du eine "Abgeleitete Spalte" zwischenschalten und damit den Datentypen konvertieren.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hi,
          war mehr so ins Blaue geraten
          Aber so aus dem Bauch heraus würde ich, jedenfalls so lange Du die genau Uhrzeit nicht brauchst, mit einem Substring die ersten 10 Stellen der Strings herausschneiden und dann in ein Datetime umwandeln.

          Comment


          • #6
            Hallo O. Helper,
            danke für den Tip-habe ich auch gemacht.Mir ist aber immer noch nicht gelungen,die richtige Expression zu finden und die "jungs" nerven schon richtig. Es kommt Syntaxfehler-habe wohl ein Klammerproblem oder so.

            Comment


            • #7
              Ja, allein die Bearbeitung eines Ausdruck in dem kleinen Spaltenfeld kostet Nerven.
              Versuch es mal mit:

              SUBSTRING((DT_WSTR,10)[Datum], 7, 2) + "." + SUBSTRING((DT_WSTR,10)[Datum], 5, 2) + "." + SUBSTRING((DT_WSTR,10)[Datum], 1, 4)

              Ich habe [Datum] im gleichen Format und lese es eigentlich als Integer Wert ein, deshalb hier noch die extra Konvertierung in String.
              Wie man sehen kann, formatiere ich es dann in ein DE Format um; ggf. musst Du es in EN-GB oder EN-US abwandeln, damit es in ein Datum konvertiert werden kann.
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                ich beiße jetzt gleich in den Schreibtisch-es funktioniert nicht. es kommt zwar jetzt kein Syntaxfehler, dafür wieder mein "Ausgangsfahler".Aber trotzdem erstmal vielen Dank für Deine Hilfe.

                Comment


                • #9
                  Hallo O.Helper,

                  hier die Lösung die zum Ziel führte.SUBSTRING([Spalte 5],1,4) + "." + SUBSTRING([Spalte 5],5,2) + "." + SUBSTRING([Spalte 5],7,2),

                  heute habe ich das Problem einen String in money wandeln zu müssen.Schon mal gemacht?

                  Comment


                  • #10
                    Originally posted by Skimausi2908 View Post

                    heute habe ich das Problem einen String in money wandeln zu müssen.Schon mal gemacht?
                    Was hat denn der String für ein Format, befindet sich Komma oder ein Punkt als Dezimaltrennzeichen und wie viele Nachkommastellen gibt es?

                    Comment


                    • #11
                      es gibt 2 Stellen nach dem Punkt und es ist ein [DT_STR],50

                      Comment


                      • #12
                        Hey, ich habe folgenden Link gefunden, vieleicht hilft er dir
                        http://social.msdn.microsoft.com/For...0-80d97ca2da4d

                        Comment


                        • #13
                          nicht wirklich, aber trotzdem danke für Deine Hilfe.

                          Comment


                          • #14
                            TRIM(BetragTxt) == "" ? NULL(DT_NUMERIC,10,2) : (DT_NUMERIC,10,2)TRIM(REPLACE("0" + BetragTxt,".",","))

                            Erklärung:
                            == "" ? NULL(DT_NUMERIC,10,2)
                            Damit ich NULL Werte für leere Werte bekomme.

                            ("0" +
                            Weil ich für Cent-Beträge z.B. .30 und nicht 0.30 bekomme

                            REPLACE("0" + BetragTxt,".",","))
                            Um aus dem Dezimalpunkt ein Komma zu machen
                            Olaf Helper

                            <Blog> <Xing>
                            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                            Comment


                            • #15
                              Hallo .. Hier ist es wie ich es meistens löse in ein SSIS paket.. Ich lese ein CSV datei und füge alle Informationen in meiner Datenbank ein!!
                              Der Datum hat hier den Format YearMonthDayHourMinuteSecond

                              Dim sepcount As Integer
                              Dim separator As String() = {";"}
                              Dim s As String() = l.Split(separator, StringSplitOptions.RemoveEmptyEntries)
                              sepcount = l.Split(";".ToCharArray).Length
                              s = l.Split(separator, StringSplitOptions.None)



                              If (sepcount = 11) Then


                              Dim d As New Date(Convert.ToInt32(s(8).Substring(0, 4)), _
                              Convert.ToInt32(s(8).Substring(4, 2)), _
                              Convert.ToInt32(s(8).Substring(6, 2)), _
                              Convert.ToInt32(s(8).Substring(8, 2)), _
                              Convert.ToInt32(s(8).Substring(10, 2)), _
                              Convert.ToInt32(s(8).Substring(12, 2)))




                              NummerBuffer.AddRow()
                              NummerBuffer.ILNWARENEMP = s(6)
                              NummerBuffer.ILNRECHNUNGEMP = s(7)
                              NummerBuffer.AUSSENDUNGSDATUM = d
                              ....

                              In die Datenbank wird es als DATETIME definiert!! und in die SSIS Paket wird es datenbanktimestamp!
                              viel spass

                              Comment

                              Working...
                              X