基本的に、ユーザーが入力する日付を比較しようとしていますが、それが今日の日付 (GETDATE()) より大きい場合は、エラーがスローされ、データが入力されません。クエリはエラーをスローしますが、データを入力して結果を最後に表示します。
USE EMR
GO
IF EXISTS (SELECT DB_ID('CheckDate'))
DROP TRIGGER CheckDate
GO
CREATE TRIGGER CheckDate
ON VISIT
AFTER INSERT, UPDATE
AS
BEGIN TRAN
DECLARE @ErrorMessage VARCHAR(200)
DECLARE @Date VARCHAR(20) = CAST ((SELECT CONVERT (DATE, GETDATE())) AS VARCHAR(20))
SET @ErrorMessage = 'Date Must Be On Or Before ' + @Date + '';
DECLARE @CheckDate DATE = (SELECT Date_Of_Service FROM inserted);
IF CAST((@CheckDate) AS DATE) <= CAST(GETDATE() AS DATE)
COMMIT TRAN
ELSE
RAISERROR(@ErrorMessage, 1, 1)
これは私の挿入ステートメントです:
INSERT INTO VISIT (PK_VISIT_ID, Date_Of_Service)
VALUES (02913, '2018-12-03')
そして、これを取得します:
Date Must Be On Or Before 2016-02-17
Msg 50000, Level 1, State 1
(1 row(s) affected)