I have some problems with my trigger.
On my transactions table I can’t allow any rows to be inserted which are cancelled.
Any transaction can be Scheduled
, Done
or Cancelled
.
If you insert a cancelled transaction, my trigger should check the date of transaction and if was before the actual date (GETDATE()
) it’s Done
, and if its after the actual date is Scheduled
.
I performed and it worked, but it change the old records not only the inserted row.
CREATE OR ALTER TRIGGER t2222 ON Transacoes AFTER INSERT AS BEGIN UPDATE TRANSACOES SET ESTADO = 'Done' FROM inserted i WHERE (i.ESTADO = 'Cancelada' AND i.DATA_DA_TRANSACAO < GETDATE()) UPDATE TRANSACOES SET ESTADO = 'Scheduled' FROM inserted i WHERE (i.ESTADO = 'Cancelada' AND i.DATA_DA_TRANSACAO >= GETDATE()) END GO
Advertisement
Answer
Hmmm . . . You need some sort of id to connect the transactions table with inserted
. So, I would expect something like:
UPDATE t SET ESTADO = (CASE WHEN i.ESTADO = 'Cancelada' AND i.DATA_DA_TRANSACAO < GETDATE() THEN 'DONE' WHEN i.ESTADO = 'Cancelada' and i.DATA_DA_TRANSACAO >= GETDATE() THEN 'Scheduled' END) FROM TRANSACOES t JOIN inserted i ON i.transaction_id = t.transaction_id WHERE (i.ESTADO = 'Cancelada' AND i.DATA_DA_TRANSACAO < GETDATE()) OR (i.ESTADO = 'Cancelada' and i.DATA_DA_TRANSACAO >= GETDATE());