时间:2021-07-01 10:21:17 帮助过:2人阅读
--删除存储过程 drop proc BuyFriut
二、触发器
--触发器,特殊的存储过程,执行的时间和存储过程不一样,存储过程在调用的时候执行,触发器是在执行某种操作的时候触发执行,相当于C#里面的事件
触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。
当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器。登录触发器将为响应 LOGON 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。
当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。
主要讲述DML触发器,DML触发器有两种:AFTER(FOR),INSTEAD OF触发器,同时DML 触发器使用 deleted 和 inserted 逻辑(概念)表。 它们在结构上类似于定义了触发器的表,即对其尝试执行了用户操作的表。 在 deleted 和 inserted 表保存了可能会被用户更改的行的旧值或新值。
一、删除之后执行for(after) delete
--建立 Loginone、biandong数据库 select * from Loginone select * from biandong go --创建触发器 create trigger TR_LOGINONE_DELETE--create trigger创建触发器 on Loginone --on后面是对那个表执行 for delete --删除的时候执行 --after delete --删除之后执行 --instead of delete --替代执行 as begin declare @uid varchar(50),@name varchar(50) select @uid=UserName,@name=Name from deleted--从delect删除表中找2个数据,数据已经删除 insert into biandong values(@uid,@name,‘删除‘) end go --在对表loginnoe进行删除的时候触发器执行 delete from Loginone where UserName=‘aaa‘
二、替代执行instead of
--instead of触发器 --删除student里面的数据的时候用另外两条语句替代,先删从表再删主表 create trigger TR_STUDENT_DELETE on Student instead of delete as begin declare @sno varchar(20) select @sno=sno from deleted delete from score where sno=@sno delete from student where sno=@sno end --执行删除的时候触发 delete from student where sno=‘101‘ select * from student select * from score select * from course select * from teacher
15-07-22 数据库--存储过程、触发器
标签: