none
Fehler im DTS Paket RRS feed

  • Frage

  • Hallo,

    Die unten stehenden SQL Anweisungen gehen im Query Analyzer.

    UPDATE tFirma SET tFirma.BuchungsDatumBis='1/31/2012 00:00:00', tFirma.PeriodeBis='1/31/2012 00:00:00', tFirma.KzRueckdatierung=1, tFirma.KzVJSachkontoBuchenER=1,tFirma.LeistungsDatumBis='1/31/2012 00:00:00', tFirma.GeaendertVon=33
    from tFirma where  tFirma.FirmenID=20

     

    Will ich die im DTS Paket ausführen in einem Task, kommt die Meldung:" Fehlerquelle: Microsoft OLE DB Provider for SQL Server"

    "Ber der Konvertierung eines char-Datentyps in einen datetime-Datentyp liegt der datetime-Wert außerhalb der gültigen Bereiches."

    Warum geht das im Query Analyzer und welcher "gültiger Bereich" ist da gemeint? Was gebe ich da an?

     

    lg

    Mittwoch, 21. Dezember 2011 17:01

Antworten

  • Eine kurze Ergänzung zu Olafs Antwort! Das folgende sollte (wegen ISO-Format) funktionieren:

    SET tFirma.BuchungsDatumBis='2012-01-31 00:00:00'

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Falk Krahl Dienstag, 27. Dezember 2011 10:11
    • Als Antwort markiert azwinzds1 Donnerstag, 5. Januar 2012 08:16
    Donnerstag, 22. Dezember 2011 09:29
  • Danke jetzt ist es mir klar!
    • Als Antwort markiert azwinzds1 Donnerstag, 5. Januar 2012 08:16
    Freitag, 23. Dezember 2011 14:25

Alle Antworten

  • Hallo,

    Text Daten werden im Standard gemäß der Regional Einstellungen des User konvertiert. Wenn man ein en-US Profil hat, wird ein Datum in eben im en-US Format erwarten. Hat man ein abweichendes Profil und erhält ein textuelles Datum im en-US Format, kann es zu Fehlern wie bei Dir führen oder noch schlimmer, zu keinen Fehlern, dafür aber zu fehlerhaften Daten, weil Monat und Tag vertauscht sind.
    Das Paket wird unter einem anderem Account als Deinem ausgeführt, deswegen kann es unterschiedlliche Ergebnisse geben.

    Das beste ist immer mit Regional-Unabhängigen Formaten wie dem Iso-Format zu arbeiten.
    Andernfalls sollte man das Datumsformat explizit angeben, was bei CAST nicht geht, deswegen immer CONVERT verwenden, dort geht es. Dort gibt es den Formatparameter 101 = US Format, siehe CONVERT => Hinweise.
    Beispiel:

    UPDATE tFirma 
    SET tFirma.BuchungsDatumBis = CONVERT(datetime, '1/31/2012 00:00:00', 101)
      , tFirma.PeriodeBis = CONVERT(datetime, '1/31/2012 00:00:00', 101)
      , tFirma.KzRueckdatierung=1
      , tFirma.KzVJSachkontoBuchenER=1
      , tFirma.LeistungsDatumBis= CoNVERT(datetime, '1/31/2012 00:00:00', 101)
      , tFirma.GeaendertVon=33
    FROM tFirma 
    WHERE tFirma.FirmenID=20
    

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort vorgeschlagen Falk Krahl Dienstag, 27. Dezember 2011 10:11
    Mittwoch, 21. Dezember 2011 17:58
  • Eine kurze Ergänzung zu Olafs Antwort! Das folgende sollte (wegen ISO-Format) funktionieren:

    SET tFirma.BuchungsDatumBis='2012-01-31 00:00:00'

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Falk Krahl Dienstag, 27. Dezember 2011 10:11
    • Als Antwort markiert azwinzds1 Donnerstag, 5. Januar 2012 08:16
    Donnerstag, 22. Dezember 2011 09:29
  • Danke jetzt ist es mir klar!
    • Als Antwort markiert azwinzds1 Donnerstag, 5. Januar 2012 08:16
    Freitag, 23. Dezember 2011 14:25