none
"Error converting data type DBTYPE_DBTIMESTAMP to datetime2" - Zugriff von SQL auf Oracle - wie CASTe ist richtig? RRS feed

  • Frage

  • Moin,

    ich gebe folgende SQL-Syntax in eine neue Query meines SQL-Servers 2008 ein, um über eine Linked Server auf einen Oracle Server zuzugreifen:

    SELECT *
    
    FROM OPENQUERY
    
    (LSERVER, 'select MEINESPALTE from MEINETABELLE'
    
    

    Dann erhalte ich folgende Fehlermeldung:

    Msg 8114, Level 16, State 8, Line 1
    Error converting data type DBTYPE_DBTIMESTAMP to datetime2.

    Laut ein paar Internetseiten muss ich in diesem Fall mit dem Befehl CAST den Datentyp umwandeln.

    Ich gebe folgende Syntax ein: 

    SELECT CAST(MEINESPALTE AS DATETIME2(7))
    
    FROM OPENQUERY
    
    (LSERVER, 'select MEINESPALTE from MEINETABELLE')
    
    

    Leider erhalte ich auch hier die gleiche Fehlermeldung:

    Msg 8114, Level 16, State 8, Line 1
    Error converting data type DBTYPE_DBTIMESTAMP to datetime2.

    Frage: Habt ihr einen Tipp für mich, wie ich den Datentyp (Datum) von Oracle in einen Datentyp von SQL (Datum) noch konvertieren kann?

    Was mir noch aufgefallen ist: Ich kann eine weitere Datumsspalte (wie auch alle anderen Spalten anderer Datentypen) problemlos abfragen. Der Unterschied zwischen der Spalte die geht und der Spalte, die nicht geht, ist meinen Augen nur, dass die funktionierende Spalte gefüllt und die nicht funktionierende Spalte nicht gefüllt ist. Liegt hier schon das Problem?

    Viele Grüße


    Dienstag, 24. Mai 2011 14:35

Antworten

  • Hallo Mining,

    wenn nur der Datumsanteil (ohne Uhrzeit) von den Oracle Werten benötigt wird, wäre es vielleicht das einfachste, das Datum bereits unter Oracle in varchar zu casten und dann unter MS SQL Server wieder zurück in ein Datum; versuche es einfach mal:

    SELECT CAST(MEINESPALTE AS DATETIME2(7))

    FROM OPENQUERY

       (LSERVER, 'select to_char(MEINESPALTE, ''YYYMMDD'') AS MeineSpalte from MEINETABELLE')

     


    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
    Dienstag, 24. Mai 2011 14:55
  • Hallo Olaf,

    vielen Dank für deine Antwort.

    Wir casten jetzt auf dem Oracle-Server (View erstellt) und jetzt funktioniert die Abfrage.

    Der Grund für die Fehlermeldung auf dem SQL-Server ist wohl, dass die Spalte (oder zumindest einzelne Felder) in der Oracle Datenbank leer sind.

    Viele Grüße

    Donnerstag, 26. Mai 2011 11:47

Alle Antworten

  • Hallo Mining,

    wenn nur der Datumsanteil (ohne Uhrzeit) von den Oracle Werten benötigt wird, wäre es vielleicht das einfachste, das Datum bereits unter Oracle in varchar zu casten und dann unter MS SQL Server wieder zurück in ein Datum; versuche es einfach mal:

    SELECT CAST(MEINESPALTE AS DATETIME2(7))

    FROM OPENQUERY

       (LSERVER, 'select to_char(MEINESPALTE, ''YYYMMDD'') AS MeineSpalte from MEINETABELLE')

     


    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
    Dienstag, 24. Mai 2011 14:55
  • Hallo Olaf,

    vielen Dank für deine Antwort.

    Wir casten jetzt auf dem Oracle-Server (View erstellt) und jetzt funktioniert die Abfrage.

    Der Grund für die Fehlermeldung auf dem SQL-Server ist wohl, dass die Spalte (oder zumindest einzelne Felder) in der Oracle Datenbank leer sind.

    Viele Grüße

    Donnerstag, 26. Mai 2011 11:47