Sqlserver中存储过程,触发器,自定义函数(三)
发布时间:2020-12-12 14:50:13 所属栏目:MsSql教程 来源:网络整理
导读:Sqlserver中存储过程,触发器,自定义函数: 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete After触发器:记录被改变之后激
Sqlserver中存储过程,触发器,自定义函数: 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 create trigger 订单提醒_Mail on 订单 after insert,update,delete as begin print '提醒电子邮件' exec master..xp_sendmail 'admin@163.com',--这两个逗号不能省 @message='订单有更改,请查询确定',@subject='提醒订单有变' end eg2:插入记录回滚 create trigger 订单提醒_Inserton 订单after insertasbeginif(select 订单日期 from inserted) > getdate()beginprint '订单日期有误'raiserror('订单日期有误',16,5)rollback transactionendendeg3:触发器的嵌套,有两个触发器,分别定义在两个不同的表上,并且都是对insert操作定义的, 当向其中一个表插入一条数据的时候,同时在另一张表里也插入一条记录来记录本次数据插入的日志, 这个操作就会同时激发两个触发器,举例略。Instead of触发器:不会去执行原来的sql语句,转而执行触发器里面的sql语句,当触发器的sql语句执行完再接着执行原来的sql语句eg1:避免修改后再回滚,减少服务器负担create trigger 订单提醒_Inserton 订单instead of insertasbeginset nocount on;declare--声明多个变量的方法@订单号 varchar(50),@供应商号 varchar(50),@职工号 varchar(50),@订单日期 datetimeselect @订单号=订单号 from insertedselect @供应商号=供应商号 from insertedselect @职工号=职工号 from insertedselect @订单日期=订单日期 from insertedif(@订单日期) > getdate()print '订单日期有误'elseinsert into 订单 values(@订单号,@供应商号,@职工号,@订单日期)endDDL触发器:eg1:禁止对数据表做修改和删除操作create trigger 禁止对数据表操作 on database for drop_table,alter_table as print '您没有权限对数据表进行操作' rollback (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |