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
qq:527592435