Benutzer mit den meisten Antworten
Wie kann ich bei einem Update einer Tabelle Datum und Uhrzeit setzen?

Frage
-
Ich arbeite auf Navision (SQL Server 10.50.6220)
mit Microsoft SQL Server Management Studio 11.0.2100.60Folgende Tabelle liegt zugrunde:
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=99999Es 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
Antworten
-
- Bearbeitet Evgenij Smirnov Montag, 22. Juni 2020 08:38
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 29. Juni 2020 06:30
- Als Antwort markiert stephanwolf Montag, 29. Juni 2020 07:10
Alle Antworten
-
- Bearbeitet Evgenij Smirnov Montag, 22. Juni 2020 08:38
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Montag, 29. Juni 2020 06:30
- Als Antwort markiert stephanwolf Montag, 29. Juni 2020 07:10
-
Hallo Stephan,
ich verstehe nicht so ganz, warum Du nicht einfach GETDATE() einsetzt? Also so:
UPDATE Tabelle SET ... = ..., Datum = GETDATE() WHERE ...
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport- Als Antwort vorgeschlagen Christoph Muthmann Dienstag, 23. Juni 2020 06:42
-
Wenn du nur ein Datum willst, dann muss der Zeitanteil auf 0 (Mitternacht) gesetzt werden, das geht am leichtesten mit einem CAST():
UPDATE [NAVISION2009].[dbo].[xxxxxx_GmbH$Raumgew] SET RGew = 41.5 , Bearbeiter = 'swolf' , -- Ggf. SUSER_SNAME()? Datum = CAST(GETDATE() AS DATE) , FSZ = 179 WHERE Bez = 'C' AND PU = 200 AND System = 'B3' AND LaengeMin = 0 AND LaengeMax = 99999;
Wenn du Datum und Uhrzeit möchtest, dann ist es noch einfacher:
UPDATE [NAVISION2009].[dbo].[xxxxxx_GmbH$Raumgew] SET RGew = 41.5 , Bearbeiter = 'swolf' , -- Ggf. SUSER_SNAME()? Datum = GETDATE() , FSZ = 179 WHERE Bez = 'C' AND PU = 200 AND System = 'B3' AND LaengeMin = 0 AND LaengeMax = 99999;
- Bearbeitet Stefan HoffmannModerator Mittwoch, 24. Juni 2020 08:29