Ajude o site desativando o bloqueador de anúncio
Cabeçalho

Protheus, Exemplo de trigger para SQLServer

Autor: Eurai Criado: 16/02/2026 Atualizado: 24/02/2026 SQLServer
Postagem

Protheus 💻 Exemplo de Trigger para SQL Server

Fala, pessoal do Protheus! 👊

Hoje vamos trabalhar com Trigger no SQL Server, aplicando regra diretamente no banco para garantir integridade dos dados na tabela SRA. Bora elevar o nível do seu ambiente? 🚀

cQuery := cCRLF + "CREATE TRIGGER SRAXEXP ON " + RetSQLName('SRA') + " AFTER UPDATE, DELETE "
cQuery += cCRLF + "AS "
cQuery += cCRLF + "BEGIN "
cQuery += cCRLF + " SET NOCOUNT ON; "
 
cQuery += cCRLF + " DECLARE @RECNO BIGINT, @MSEXP VARCHAR(8); "
 
cQuery += cCRLF + " IF EXISTS(SELECT 1 FROM DELETED) "
cQuery += cCRLF + " BEGIN "
cQuery += cCRLF + " DECLARE deleted_cursor CURSOR FOR "
cQuery += cCRLF + " SELECT R_E_C_N_O_, RA_XEXP FROM DELETED; "
 
cQuery += cCRLF + " OPEN deleted_cursor; "
cQuery += cCRLF + " FETCH NEXT FROM deleted_cursor INTO @RECNO, @MSEXP; "
 
cQuery += cCRLF + " WHILE @@FETCH_STATUS = 0 "
cQuery += cCRLF + " BEGIN "
cQuery += cCRLF + " IF @MSEXP IS NOT NULL AND @MSEXP != '' "
cQuery += cCRLF + " BEGIN "
cQuery += cCRLF + " UPDATE " + RetSQLName("SRA")
cQuery += cCRLF + " SET RA_XEXP = '' "
cQuery += cCRLF + " WHERE R_E_C_N_O_ = @RECNO "
cQuery += cCRLF + " AND RA_XEXP IS NOT NULL; "
cQuery += cCRLF + " END "
 
cQuery += cCRLF + " FETCH NEXT FROM deleted_cursor INTO @RECNO, @MSEXP; "
cQuery += cCRLF + " END "
 
cQuery += cCRLF + " CLOSE deleted_cursor; "
cQuery += cCRLF + " DEALLOCATE deleted_cursor; "
cQuery += cCRLF + " END "
 
cQuery += cCRLF + " IF EXISTS(SELECT 1 FROM INSERTED) AND EXISTS(SELECT 1 FROM DELETED) "
cQuery += cCRLF + " BEGIN "
cQuery += cCRLF + " UPDATE i "
cQuery += cCRLF + " SET RA_XEXP = '' "
cQuery += cCRLF + " FROM INSERTED i "
cQuery += cCRLF + " INNER JOIN DELETED d ON i.R_E_C_N_O_ = d.R_E_C_N_O_ "
cQuery += cCRLF + " WHERE d.RA_XEXP IS NOT NULL "
cQuery += cCRLF + " AND d.RA_XEXP != '' "
cQuery += cCRLF + " AND (i.RA_XEXP != d.RA_XEXP OR i.RA_XEXP IS NULL); "
cQuery += cCRLF + " END "
 
cQuery += cCRLF + "END; "
 
If TCSqlExec(cQuery) < 0
MsgInfo(TCSQLError())
EndIf

📌 O que essa trigger faz?

Ela é executada após UPDATE ou DELETE na tabela SRA. A lógica garante que, caso o campo RA_XEXP possua valor e sofra alteração, ele seja automaticamente limpo.

💡 No SQL Server utilizamos as tabelas lógicas INSERTED e DELETED, permitindo tratar operações em lote com segurança.

Curtiu o conteúdo? Compartilhe com seus colegas 👊

ASSINE A NEWSLETTER

Cadastrando...

PIX uDesenv

PIX QR Code para depósito

Clique para doar

Parceiros

Tudo em ADVPL - Blog parceiro

Blog ADVPL