none
Wie kann ich bei einem Update einer Tabelle Datum und Uhrzeit setzen? RRS feed

  • Frage

  • Ich arbeite auf Navision (SQL Server 10.50.6220)
    mit Microsoft SQL Server Management Studio    11.0.2100.60

    Folgende Tabelle liegt zugrunde:Struktur der betroffenen Tabelle

    Folgende SQL-Abfrage hat nicht funktioniert:

    update [NAVISION2009].[dbo].[xxxxxx_GmbH$Raumgew]
    set
    RGew=41.5,
    Bearbeiter='swolf',
    Datum=(CAST( year(GETDate()) as varchar) + '-' + CAST(month(GETDate()) as varchar) + '-' + cast(DAY(GETDate()) as varchar) + ' 00:00:00.000',
    FSZ=179
    where Bez='C' and PU=200 and System='B3' and LaengeMin=0 and LaengeMax=99999

    Es gab Probleme bei der Umsetzung des Datums.
    Gerne würde ich neben dem Datum auch die aktuelle Uhrzeit im Datensatz setzen, wenn ich diesen mit update aktualisiere.

    Wie macht man das richtig?

    Danke für Hilfe im Voraus.

    ---------------------------------------

    Update 25.06.20

    Herzlichen Dank Evgenij, „Der Suchende“, Stefan und Stefan für die tolle Unterstützung. Ganz entscheidend ist offenbar, wie der Ersteller der Navision-Datenbank das Feld in NAV angelegt hat, Datum, Zeit oder DateTime.

     

    In dem von mir oben beschriebenen Fall führte

    update [NAVISION2009].[dbo].[xxx$Raumgew]
    set
    RGew=42.5,
    Datum=CURRENT_TIMESTAMP,
    Bearbeiter='swolf',
    FSZ=179
    where Bez='E' and PU=200 and System='B3' and LaengeMin=5000 and LaengeMax=99999
    

    dazu, daß man danach die Tabelle mit dem ObjectDesigner von Navision nicht mehr öffnen konnte.  

    Vom Ersteller der Navision-Datenbank habe ich dann erfahren, wie das Feld seiner Datenbank richtig zu füllen wäre:

    set 
    RGew=42.5,
    Datum = CONVERT(DATETIME, CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112), 112),
    Bearbeiter='swolf',
    FSZ=179
    where Bez='E' and PU=200 and System='B3' and LaengeMin=5000 and LaengeMax=99999
    

    denn das Feld „Datum“ verlangt ein Datum ohne Uhrzeit.

    Beispiele:

    --Setzen des Datums und der Uhrzeit, wenn es sich in NAV um ein DateTime-Feld handelt
    update [dbo].[Tabellenname]
    set Feldname = CURRENT_TIMESTAMP
    where ID = 1
    
    
    --Setzen des Aktuellen Datums, wenn es sich in NAV um ein Date-Feld handelt
    update [dbo].[Tabellenname]
    set Datum = CONVERT(DATETIME, CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112), 112)
    where ID = 1
    
    
    --Setzen der aktuellen Uhrzeit, wenn es sich in NAV um ein Time-Feld handelt
    update [dbo].[Tabellenname]
    set Uhrzeit = CONVERT(DATETIME, '17540101 ' + CONVERT(CHAR(8), CURRENT_TIMESTAMP, 114), 114)
    where ID = 1
    

    Bei einem Uhrzeit-Feld ist es schwieriger, weil NAV einen Unterschied macht, ob ein Zeit-Feld Leer ist, oder 0:00 beinhaltet. Leere Felder haben eben in der Datumskomponente das Jahr 1753 stehen, also 01-01-1753 00:00:00.000, ein Zeit-Feld mit 0:00 hat hingegen 1754, also 01-01-1754 00:00:00.000. Die Datumskomponente wird also von NAV mißbraucht, um darüber abzugrenzen ob ein Feld leer ist, oder einfach nur 0:00 beinhaltet.

    Ich bin wohl fälschlicherweise davon ausgegangen, daß es sich um ein DateTime-Feld handelt, tatsächlich handelte es sich aber um ein Datum-Feld. Offenbar zeigt das Microsoft SQL Server Management Studio nicht unbedingt die Feldart einer Navision-Datenbank korrekt an?! Deshalb sich besser beim Ersteller der Datenbank bzw. der Tabelle nach der Struktur und den Feldarten erkundigen!

    Ich wollte meine neuen Erkenntnisse der Allgemeinheit zur Verfügung stellen und danke nochmals allen Unterstützern.


    • Bearbeitet stephanwolf Donnerstag, 25. Juni 2020 06:01 Neue Informationen
    Montag, 22. Juni 2020 08:28

Antworten

Alle Antworten