【发布时间】:2016-06-27 12:34:30
【问题描述】:
我正在尝试比较两个日期,@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;
感谢您的帮助。
【问题讨论】:
-
inserted和deleted是表,因此它们可以表示集合操作的结果。假设触发器总是只处理一行,而设计触发器通常是一个糟糕的计划。如果您绝对确定不会超过一排,那么请添加对行数的检查,并使用RaIsError或Throw明确告知以后来的人他们有试图执行不可接受的语句。 (if ( select Count(*) from inserted ) > 1 RaIsError( 'FooTable_Insert: No more than one row may be processed.', 25, 42 ) with log)
标签: sql sql-server tsql triggers