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

SELECT * FROM Inserted mit Spalte "timestamp" und Fehlermeldung

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von rogman, 9 November 2017.

  1. rogman

    rogman Neuer Benutzer

    Guten Tag allerseits, folgender Code gibt mir den Fehler ...

    Nachricht 273, Stufe 16, Status 1, Prozedur TR_UPDATE, Zeile 16 [Batchstartzeile 0]
    Ein expliziter Wert kann nicht in eine timestamp-Spalte eingefügt werden. Verwenden Sie INSERT mit einer Spaltenliste, um die timestamp-Spalte auszuschließen, oder fügen Sie einen DEFAULT-Wert in die timestamp-Spalte ein.


    CREATE TRIGGER TR_UPDATE ON tb_Adresse
    INSTEAD OF UPDATE
    AS
    BEGIN

    -- letzten gültigen Datensatz inaktivieren
    UPDATE tb_Adresse SET
    Gültig_Bis = GETDATE(),
    Ist_Gültig = 0
    FROM tb_Adresse INNER JOIN Inserted ON tb_Adresse.ID = Inserted.ID
    WHERE tb_Adresse.Ist_Gültig=1
    ;

    -- neuen Datensatz einfügen
    INSERT INTO tb_Adresse
    SELECT * FROM Inserted
    ;

    END;

    Wenn ich eine Spaltenliste detailliert aufsetze kommt folgende Fehlermeldung, weil ich wie angegeben die Spalte mit dem "timestamp" auslasse....

    Ein Defaultwert gemäss erster Fehlermeldung kann, gemäss meinen Recherchen auf timestamp auch nicht gesetzt werden


    Insert mit Tabellenliste:
    SELECT ID, Gültig_Ab,Gültig_Bis,Ist_Gültig,ZHd_Name,Strasse,StrasseZusatz,PLZ,
    Ort,Land,Bearbeitet_Durch,KundeID FROM Inserted


    Nachricht 213, Stufe 16, Status 1, Prozedur TR_UPDATE, Zeile 16 [Batchstartzeile 0]
    Der Spaltenname oder die Anzahl der bereitgestellten Werte entspricht nicht der Tabellendefinition.


    Kann mir da jemand weiter helfen? Bin ein SQL und SSMS newbi.... [​IMG]
     
  2. ukulele

    ukulele Datenbank-Guru

    Du hast vermutlich Gültig_Bis als TIMESTAMP definiert. TIMESTAMP ist nicht wie DATETIME und auch kein Zeitwert. Außerdem wird er automatisch gefüllt, ein default Wert macht dort keinen Sinn. Kurz und knapp:
    Difference between datetime and timestamp in sqlserver?

    Ich vermute du suchst an der Stelle wo du TIMESTAMP definiert hast eher DATETIME.

    Bei deinem zweiten Beispiel müsstest du schon die Spaltenliste hinter INSERT INTO tb_Adresse mit der hinter SELECT abstimmen, die Anzahl ist nicht gleich. In deinem Beispiel steht auch Gültig_Bis was wider ein Problem ist wenn es sich um einen TIMESTAMP handelt.

    Der Teil "neuen Datensatz einfügen" ist eigentlich überflüssig. Dein Trigger reagiert nur auf UPDATE, nicht auf INSERT. Bei einem UPDATE würde jetzt die Tabelle aktuallisiert und alle betroffenen Einträge nochmals eingefügt. Das ergibt wenig Sinn.
     
    Walter gefällt das.
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