TSQL - 比较两个日期[TRIGGER和IF]

时间:2016-06-27 12:34:30

标签: sql sql-server tsql triggers

我想比较两个日期,@ 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;

IMAGE 1 IMAGE 2

感谢您的帮助。

2 个答案:

答案 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