sqserver2008触发器

时间:2024-12-11 14:32:50

@参考博文

先上代码

先建个表用于测试

sqserver2008触发器

CREATE TRIGGER INSERT_forbidden on s after INSERT
AS
BEGIN
RAISERROR('禁止向s中插入数据',,)
ROLLBACK--不加这一句不会回滚,抛错后将直接插入
END

上述触发器执行情况:当向s表插入数据时禁止插入,插入时抛错(raiserror)如下

sqserver2008触发器

语法:

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('')

测试前

sqserver2008触发器

第一次测试结果:

sqserver2008触发器sqserver2008触发器

第二次测试结果

sqserver2008触发器sqserver2008触发器