Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Timestamp mit Standardbindung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Granados, 13 September 2016.

  1. Granados

    Granados Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Granados

    Granados Benutzer

    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
     
  4. ukulele

    ukulele Datenbank-Guru

    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;
    
     
  5. Granados

    Granados Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden