我想比较两个日期,@ DataJogo和@DataEvento,并想检查播放日期是否晚于活动日期。
触发器仅在插入有效时才起作用,同时选择IF。
CREATE TRIGGER TriValidaData
ON jogo
AFTER INSERT, UPDATE
AS
DECLARE @DataJogo date, @DataEvento date , @IDJogo int, @IDEvento int
SELECT @IDJogo = id_jogo FROM inserted
SELECT @IDEvento = id_evento FROM inserted
SELECT @DataJogo = data FROM inserted
SELECT @DataEvento = data FROM evento WHERE id_evento = @IDEvento
IF @DataJogo > @DataEvento
SELECT 'O jogo foi adicionado com sucesso.' AS 'MENSAGEM';
ELSE
DELETE FROM jogo WHERE id_jogo = @IDJogo;
SELECT 'A data não é valida. A inserção de dados não foi efectuada com sucesso.' AS 'MENSAGEM';
INSERT INTO jogo VALUES (11,'15:00:00','16:00:00','2018-05-01',3,10,0)
DELETE FROM jogo WHERE id_jogo = 11;
感谢您的帮助。
答案 0 :(得分:1)
请勿使用触发器执行此操作。使用检查约束执行此操作:
alter table TriValidaData add constraint chk_TriValidaData_datas
check (@DataJogo > @DataEvento);
如果你想使用触发器来做这件事,那么你应该使用“而不是”触发器,只有在条件为真时才更新/插入表格。
答案 1 :(得分:0)
你需要把ELSE部分放在像这样的BEGIN ... END块中,
IF @DataJogo > @DataEvento BEGIN
SELECT 'O jogo foi adicionado com sucesso.' AS 'MENSAGEM';
END
ELSE BEGIN
DELETE FROM jogo WHERE id_jogo = @IDJogo;
SELECT 'A data não é valida. A inserção de dados não foi efectuada com sucesso.' AS 'MENSAGEM';
END