SQL Server数据库--触发器

触发器-针对于表添加、删除、修改(触发)
对某张表进行添加动作,触发动作,向另外一张表添加一条操作记录


触发器:两种

触发器-有约束的

触发器-不带约束

 

 


 

 

insert/delete/update 这三种操作数据库实际上只有插入和删除两种,我们在对数据库做修改操作的时候,其实系统是把新数据放到了系统的临时表,删除了当前数据后,把系统临时表里的那条数据新增到了数据库中!

系统临时表 inserted(添加记录,新数据) deleted(删除记录,旧数据)

 


 

创建触发器

功能:如果对“产品表”进行增、删、改操作,所有操作都会写进 Log 表里

 

create trigger tri_ProductLog --创建触发器
on Product --从产品表创建
for insert,update,delete --after  instead of(可以删除带约束的表) 
as 
begin
    --相当于事务
    --假如添加
    declare @userid int --操作人
    declare @action varchar(50) --动作(添加、删除、修改)
    declare @count int=0 --统计数据记录
    if exists(select top 1 * from deleted)--判断是否删除动作(他这里判断的依据是根据:“系统临时表”的inserted【添加记录,新数据】表和deleted【删除记录,旧数据】表)
    begin
        select @userid=CreateUserId from deleted
        set @action='删除'
        set @count=@count+1
    end
    
    if exists(select top 1 * from inserted) --判断是否添加动作
    begin
        select @userid=CreateUserId from inserted
        set @action='添加'
        set @count=@count+1
    end

    if @count=2 --判断是否是修改动作(因为是修改动作的话,上面2个if都会被执行,所以此时@count变量是2)
    begin
        select @userid=CreateUserId from deleted
        set @action='修改'
    end

    insert into Logs(logContent, CreateUserId)
    values('对产品表做了'+@action+'动作',@userid)

end

 

 

测试上面触发器的代码

insert into Product(ProductNo,ProductName, Price,TypeId, CreateUserId)
values(1003,'测试产品01',5000,1,10000)

 

delete from Product
where ProductNo=1003

 

delete ProductType
where typeid=1

 


 

修改触发器

功能:如果删除“产品分类”,那么这条分类下的所有产品都会被删除!

--create
alter trigger tri_Del_ProductType
on ProductType
instead of delete 
as
begin
    declare @typeid int
    select @typeid=typeid from deleted
    print @typeid
    delete from Product where TypeId=@typeid
end

 

测试代码

delete ProductType
where typeid=1

 

posted @ 2019-03-11 17:21  橙-极纪元JJYCheng  阅读(2270)  评论(0编辑  收藏  举报