先上代码
先建个表用于测试
CREATE TRIGGER INSERT_forbidden on s after INSERT
AS
BEGIN
RAISERROR('禁止向s中插入数据',,)
ROLLBACK--不加这一句不会回滚,抛错后将直接插入
END
上述触发器执行情况:当向s表插入数据时禁止插入,插入时抛错(raiserror)如下
语法:
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION]
FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE]
AS
BEGIN
-- T-SQL语句
END
GO
--with encryption 表示加密触发器定义的sql文本
--delete,insert,update指定触发器的类型
20180815:解决sqlserver无before问题,用instead of替换
CREATE TRIGGER INSERT_forbidden on reg instead of INSERT
AS
BEGIN
if EXISTS(select 1 from reg where regStr=(select regstr from INSERTED))BEGIN
RAISERROR('禁止向注册表中插入重复数据',1,1)
ROLLBACK--不加这一句不会回滚,抛错后将直接插入
END ELSE BEGIN
INSERT into reg (regStr) select regStr from INSERTED
END
END
测试
INSERT into reg VALUES('')
测试前
第一次测试结果:
第二次测试结果