sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo puedo editar los valores de un INSERT en un disparador en SQL Server?

Utilice un activador de inserción posterior. Únete desde el inserted pseudo tabla a Tb en la clave principal. Luego actualice los valores de desc. Algo como:(Pero puede que no se compile)

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

Este activador ocurre después de que haya ocurrido la inserción, pero antes de insert declaración completa. Por lo tanto, los valores nuevos e incorrectos ya están colocados en la tabla de destino. Este activador no tendrá que cambiar a medida que se agreguen, eliminen, etc. columnas.

Advertencia Las restricciones de integridad se aplican antes de que se active el desencadenador posterior. Por lo tanto, no puede establecer una restricción de verificación para hacer cumplir la forma adecuada de DESC. Porque eso haría que la declaración fallara antes de que el disparador tuviera la oportunidad de arreglar algo. (Por favor revise este párrafo antes de confiar en él. Ha pasado un tiempo desde que escribí un disparador).