SqlServer触发器--删除一条表数据同时保存到另一张表中

时间:2021-12-29 14:47:53

很久没弄触发器,代码都忘记了,今天无意中朝花夕拾。

SqlServer自2005版本触发器可以分为两个版本:DML和DDL触发器。

1.DML触发器又分为: 

   1) after触发器(之后触发)

        a、 insert触发器

        b、 update触发器

        c、 delete触发器

    其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。

  2) instead of 触发器 (之前触发)

   instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

drop trigger repair_trigger_del --删除触发器
use DataBase --数据库
go 
create trigger repair_trigger_del --触发器名称
on repair --触发器对应的表
    after delete --delete操作后
as 
    insert into repair_del select *,getdate() from deleted  --将删除的数据插入新表
go

--查询触发器
select * from sys.objects where type = 'TR'

 

2.DDL触发器:

  1) 禁止用户修改和删除表;

  2) 禁止用户删除数据库;

  3) 记录和监控某数据库所有的DDL操作;

  4) 把DDL操作信息以邮件的形式主动发送通知和预警;

--创建DDL触发器:禁止修改或者删除数据表
CREATE TRIGGER DDL_TableTrigger
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
   PRINT '对不起,您不能对数据表进行操作,请联系DBA'
   ROLLBACK ;

--测试删除表
USE DDL_DB
GO
DROP TABLE [DatabaseLog]