我的扳机有一些问题。
在我的交易表上,我不允许插入任何被取消的行。
任何交易可能是Scheduled
,Done
或Cancelled
。
如果您插入已取消的交易,我的触发器应检查交易的日期,是否在实际日期(GETDATE()
)之前Done
,以及是否在实际日期之后Scheduled
。
我执行并奏效,但它不仅更改了插入的行,还更改了旧记录。
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
嗯。。。您需要某种ID才能将交易表与关联inserted
。因此,我期望这样的事情:
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());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句