Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je modifier les valeurs d'un INSERT dans un déclencheur sur SQL Server ?

Utilisez un déclencheur après insertion. Joindre à partir du inserted pseudo table en Tb sur la clé primaire. Ensuite, mettez à jour les valeurs de desc. Quelque chose comme :(Mais peut ne pas compiler)

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

Ce déclencheur se produit après l'insertion, mais avant insert déclaration se termine. Ainsi, les nouvelles valeurs incorrectes sont déjà placées dans la table cible. Ce déclencheur n'aura pas besoin de changer lorsque des colonnes sont ajoutées, supprimées, etc.

Mise en garde Les contraintes d'intégrité sont appliquées avant que le déclencheur after ne se déclenche. Vous ne pouvez donc pas mettre de contrainte de vérification pour appliquer la forme appropriée de DESC. Parce que cela entraînerait l'échec de l'instruction avant que le déclencheur n'ait une chance de réparer quoi que ce soit. (Veuillez vérifier ce paragraphe avant de vous y fier. Cela fait un moment que je n'ai pas écrit de déclencheur.)