Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich Werte eines INSERT in einem Trigger auf SQL Server bearbeiten?

Verwenden Sie einen After-Insert-Trigger. Treten Sie über den inserted bei Pseudo-Tabelle zu Tb auf dem Primärschlüssel. Aktualisieren Sie dann die Werte von desc. Etwas wie:(Aber darf nicht kompilieren)

CREATE TRIGGER TbFixTb_Trg 
ON  Tb  
AFTER INSERT 
AS  
BEGIN 
    UPDATE Tb
    SET DESC = SomeTransformationOf(i.DESC)
    FROM Tb
    INNER JOIN inserted i on i.Id = Tb.Id
END  
GO

Dieser Trigger erfolgt nach dem Einfügen, aber vor insert Aussage vervollständigt. Die neuen, falschen Werte sind also bereits in der Zieltabelle abgelegt. Dieser Trigger muss nicht geändert werden, wenn Spalten hinzugefügt, gelöscht usw. werden.

Vorbehalt Integritätseinschränkungen werden erzwungen, bevor der After-Trigger ausgelöst wird. Sie können also keine Check-Einschränkung setzen, um die richtige Form von DESC zu erzwingen. Weil dies dazu führen würde, dass die Anweisung fehlschlägt, bevor der Auslöser die Möglichkeit hat, etwas zu beheben. (Bitte überprüfen Sie diesen Absatz noch einmal, bevor Sie sich darauf verlassen. Es ist eine Weile her, dass ich einen Auslöser geschrieben habe.)