@DataJogoと@DataEventoの2つの日付を比較しようとしていて、再生日がイベントの日付より遅いかどうかを確認します。TSQL - 2つの日付を比較する[トリガーとIF]
トリガは、挿入が有効な場合にのみ機能し、両方が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'は、テーブルをしている、このようなBEGIN ... ENDをブロックにELSE部分を配置する必要があります。常に正確に1つの行を処理するという前提でトリガーを設計するのは、一般的には悪い計画です。もしあなたが絶対に確実であれば、複数の行が存在することはありません。そして、行数のチェックを追加し、 'RaIsError'または' Throw'を使って、後に来て、容認できない文を実行しようとしたことを明示します。 1つのRaIsError( 'FooTable_Insert:複数行は処理できません'、25,42)with log') – HABO