基本上,我试图比较用户将输入的日期以及是否大于今天的日期(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)
答案 0 :(得分:1)
您提出severity
= 1错误,这意味着服务器只是信息消息。
查看对此帖子的回复:{{3} }在msdn。上还有一个指向严重性表的链接。
答案 1 :(得分:0)
您的代码即使在raiserror之后也会执行插入操作,因为插入行的触发器在插入行后会运行触发器。您可以使用check约束或代替insert,如下所示:
{{1}}