Sqlserver中存储过程,触发器,自定义函数(三)

本文介绍了Sqlserver中的存储过程、触发器和自定义函数。触发器分为DML(Insert, Update, Delete)和DDL类型,用于在数据操作或定义语言执行时执行特定任务,例如审核、规范数据库操作和防止表结构更改。特别提到了After触发器的应用,如在记录被改变后发送提醒电子邮件。" 130276731,9639234,wxWidgets框架中的wxDataViewCtrl详解,"['C++', 'GUI开发', 'wxWidgets库']
摘要由CSDN通过智能技术生成

Sqlserver中存储过程,触发器,自定义函数:

触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活
触发器的分类:
DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete
After触发器:记录被改变之后激活执行
Instead of触发器:记录被改变之前激活执行。
DDL触发器:响应数据定义语言执行时触发执行的存储过程,一般用于执行数据库中的管理任务
审核和规范数据库的操作;
防止数据表结构被更改或删除

After触发器:
eg1:提醒电子邮件的触发器:

create trigger 订单提醒_Mail
on 订单
after insert,update,delete
as
begin
print '提醒电子邮件'
exec master..xp_sendmail 'admin@163.com',--这两个逗号不能省
@message='订单有更改,请查询确定',
@subject='提醒订单有变'
end
eg2:插入记录回滚
create trigger 订单提醒_Insert
on 订单after insertasbeginif(select 订单日期 from inserted) > getdate()beginprint '订单日期有误'raiserror('订单日期有误',16,5)rollback transactionendend


eg3:触发器的嵌套,有两个触发器,分别定义在两个不同的表上,并且都是对insert操作定义的,
当向其中一个表插入一条数据的时候,同时在另一张表里也插入一条记录来记录本次数据插入的日志,
这个操作就会同时激发两个触发器,举例略。
Instead of触发器:不会去执行原来的sql语句,转而执行触发器里面的sql语句,当触发器的sql语句执行完再接着执行原来的sql语句
eg1:避免修改后再回滚,减少服务器负担
create trigger 订单提醒_Insert
on 订单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(@订单号,@供应商号,@职工号,@订单日期)end


DDL触发器:
eg1:禁止对数据表做修改和删除操作
create trigger 禁止对数据表操作
on database
for drop_table,alter_table
as
print '您没有权限对数据表进行操作'
rollback









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值