Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso editar valores de um INSERT em um gatilho no SQL Server?


Use um gatilho após a inserção. Junte-se a partir do inserted pseudo tabela para Tb na chave primária. Em seguida, atualize os valores de desc. Algo como:(Mas pode não compilar)
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 gatilho ocorre após a inserção, mas antes de insert declaração completa. Portanto, os novos valores incorretos já estão colocados na tabela de destino. Esse acionador não precisará ser alterado à medida que as colunas forem adicionadas, excluídas etc.

Advertência As restrições de integridade são impostas antes do disparo do gatilho posterior. Portanto, você não pode colocar uma restrição de verificação para impor a forma adequada de DESC. Porque isso faria com que a instrução falhasse antes que o gatilho tivesse a chance de corrigir qualquer coisa. (Por favor, verifique este parágrafo antes de confiar nele. Já faz algum tempo desde que escrevi um gatilho.)