Timestamp mit Standardbindung

Granados

Benutzer
Beiträge
5
Hallo allerseits,
ich arbeite mit dem SQL Server Express 2012 und möchte die Spalte timestamp mit dem jetzigen Zeitpunkt besetzen, wenn ein neuer Datensatz hinzugefügt wird.
Hintergrund: Ein Access-Frontend schreibt über eine Insert-Anweisung Datensätze in die SQL Server Tabelle (DSNless). Ich habe momentan eine separate Spalte "Änderungsdatum" in der Servertabelle angelegt, die über das Access-Frontend mit dem aktuellen Datum bestückt wird. Das ist aber umständlich, auch muss man einiges an Konvertierung beachten (Access->SQL-Datenbank, Datumsformat).
Deshalb mein Gedanke: Kann man nicht einfach das timestamp Feld mit dem momentanen Datum als Standardbindung besetzen, dann hat man die ganze Insert- und Konvertierungsproblematik nicht?
Doch leider ist die Definition Standardbindung beim timestamp nicht aktiv.
Danke im Voraus: Granados
 
Werbung:
der für SQL normale Weg wäre, einen Default-Wert zu definieren, wie z.B. hier die Funktion now(), kurze Demo:

Code:
test=# create table granados(id serial primary key, ts timestamp default now(), val text);
CREATE TABLE
test=*# insert into granados values (default, default, 'ein test');
INSERT 0 1
test=*# select * from granados;
 id |  ts  |  val   
----+---------------------------+----------
  1 | 2016-09-13 13:15:38.81937 | ein test
(1 Zeile)

Das sollte bestimmt auch mit M$SQL gehen - probiere es doch mal.
 
So ganz einfach ist das wohl nicht. Ich arbeite übrigens über das Management Studio. Um das Problem der Syntax anzugehen, hab ich folgendes probiert:
Testweise hab ich eine Tabelle mit einer zusätzlichen Datumsspalte (also unabhängig vom timestamp) als smalldatetime erzeugt. Dort ist die Standardbindung im Dialog des Management Studios aktiviert. Ich kann allerdings hier auch keine Funktion wie now() oder date() eintragen. Es kommt der Hinweis, dass nur Konstanten möglich sind. Ich komme also gar nicht zum Punkt mit "script als create in", um die Syntax auszuloten.
Danke: Grandaos
 
Für MSSQL ist TIMESTAMP nicht gleich DATETIME und entspricht keinem Datumswert. Das ist auch hinreichend beschrieben, wird aber oft verwechselt.
Difference between datetime and timestamp in sqlserver?
https://msdn.microsoft.com/en-us/library/ms182776.aspx
Das setzen eines Default-Wertes für TIMESTAMP ist überflüssig da er immer von der DB automatisch gesetzt wird.

Du suchst (vermutlich) eher DATETIME mit einem Default-Value, welcher auch mit getdate() gefüllt werden kann.
Add default value of datetime field in SQL Server to a timestamp
Code:
DROP TABLE test;

CREATE TABLE test(
   test1 INT,
   test2 TIMESTAMP,
   test3 DATETIME
   );

ALTER TABLE test ADD CONSTRAINT toller_test DEFAULT GETDATE() FOR test3;

INSERT INTO test(test1) VALUES(1);

SELECT * FROM test;
1 0x000000000000DEAA 2016-09-13 15:54:34.527
 
Werbung:
Für MSSQL ist TIMESTAMP nicht gleich DATETIME und entspricht keinem Datumswert.

Dies ist die Erleuchtung!

Ich hab darafhin folgendes gemacht: Eine Spalte ANLAGEDATUM (smalldatetime) mit Standardbindung (getdate()) angelegt. Jetzt steht in meiner SQL-Tabelle, wo ja einfach nur der Zeitpunkt der Satzanlage dokumentiert werden soll, das entsprechende Datum, ohne dass es von außen eingfügt wird.

Vielen Dank: Granados
 
Zurück
Oben