Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come posso modificare i valori di un INSERT in un trigger su SQL Server?

Utilizzare un trigger dopo l'inserimento. Partecipa dal inserted pseudo tabella a Tb sulla chiave primaria. Quindi aggiorna i valori di desc. Qualcosa del tipo:(ma potrebbe non essere compilato)

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

Questo trigger si verifica dopo l'inserimento, ma prima di insert la dichiarazione si completa. Quindi i nuovi valori errati sono già inseriti nella tabella di destinazione. Questo attivatore non dovrà essere modificato poiché le colonne vengono aggiunte, eliminate e così via

Avvertimento I vincoli di integrità vengono applicati prima dell'attivazione del trigger successivo. Quindi non puoi inserire un vincolo di controllo per imporre la forma corretta di DESC. Perché ciò causerebbe il fallimento dell'istruzione prima che il trigger abbia la possibilità di correggere qualsiasi cosa. (Ricontrolla questo paragrafo prima di fare affidamento su di esso. È passato un po' di tempo dall'ultima volta che ho scritto un trigger.)