1. 概述

触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。 所以触发器可以用来实现对表实施复杂的完整性约束。
2. 触发器的分类
SQL Server2000提供了两种触发器:“Instead of” 和“After” 触发器。
一个表或视图的每一个修改动作(Insert、Update和Delete)都可以有一个“Instead of” 触发器,一个表的每个修改动作都可以有多个“After”触发器。
2.1 “Instead of”触发器
alter trigger trigger_学生_Delete on 学生 instead of Delete as begin select 学号, 姓名 from deleted end delete from 学生 where 学号 = 4
上例中定义了“trigger学生_Delete”触发器,该触发器从“delete”表中打印出所要删除的学生.在执行“delete”操作后,会发现“学号 = 4”的学生并未被删除, 原因在于“trigger学生Delete”替代了所要执行的“delete from 学生 where 学号 = 4”语句,而在“trigger学生_Delete”中并未真正删除学生。
2.2 “After”触发器
3. Inserted和Deleted表
SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。
| 对表的操作 | Inserted逻辑表 | Deleted逻辑表 |
|---|---|---|
| 增加记录(insert) | 存放增加的记录 | 无 |
| 删除记录(delete) | 无 | 存放被删除的记录 |
| 修改记录(update) | 存放更新后的记录 | 存放更新前的记录 |
4. 触发器的执行过程
5. 创建触发器
create trigger trigger_name
on {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句
6. 修改触发器:
alter trigger trigger_name
on {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句
7. 删除触发器:
drop trigger trigger_name
8. 查看数据库中已有触发器:
8.1 查看数据库中所有触发器
select * from sysobjects where xtype='TR'
8.2 查看单个触发器
exec sp_helptext '触发器名'
9. “Instead of”相关示例:
两张表:学生(学号 int, 姓名 varchar)、借书记录(学号 int, 图书编号 int)
实现功能:在删除学生表时,如果该学生仍有借书记录(未还)则不能删除
alter trigger trigger_学生_Delete
on 学生
instead of Delete
as
begin
if not exists(select * from 借书记录, deleted where 借书记录.学号 = deleted.学号)
delete from 学生 where 学生.学号 in (select 学号 from deleted)
end
10. “After”触发器
10.1 在“订单”表中建立触发器,当向“订单”表中插入一条订单记录时,检查“商品”表的货品状态“状态”是否为1(正在整理),则不能往“订单”表加入该订单。
create trigger trigger_订单_insert
on 订单
after insert
as
if (select 状态 from 商品, inserted where 商品.pid = inserted.pid)=1
begin
print 'the goods is being processed'
print 'the order cannot be committed'
rollback transaction --回滚,避免加入
end
10.2 在“订单”表建立一个插入触发器,在添加一条订单时,减少“商品”表相应的货品记录中的库存。
create trigger trigger_订单_insert2 on 订单 after insert as update 商品 set 数量 = 数量 - inserted.数量 from 商品, inserted where 商品.pid = inserted.pid
10.3 在“商品”表建立删除触发器,实现“商品”表和“订单”表的级联删除。
create trigger goodsdelete trigger_商品_delete on 商品 after delete as delete from 订单 where 订单.pid in (select pid from deleted)
10.4 在“订单”表建立一个更新触发器,监视“订单”表的“订单日期”列,使其不能被“update”.
create trigger trigger_订单_update
on 订单
after update
as
if update(订单日期)
begin
raiserror('订单日期不能手动修改',10,1)
rollback transaction
end
10.5 在“订单”表建立一个插入触发器,保证向“订单”表插入的货品必须要在“商品”表中一定存在。
create trigger trigger_订单_insert3
on 订单
after insert
as
if (select count(*) from 商品, inserted where 商品.pid = inserted.pid)=0
begin
print '商品不存在'
rollback transaction
end
10.6 “订单”表建立一个插入触发器,保证向“订单”表插入的货品信息要在“订单日志”表中添加
alter trigger trigger_订单_insert on 订单 for insert as insert into 订单日志 select inserted.Id, inserted.pid,inserted.数量 from inserted
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# sqlserver
# 触发器
# sqlserver触发器实例
# sql
# server创建触发器
# sql server中的触发器用法实例详解
# SQL Server的触发器详解
# SQL SERVER触发器详解
# SQL Server的触发器你了解多少
# 利用SQL Server触发器实现表的历史修改痕迹记录
# SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)
# SQL Server 使用触发器(trigger)发送电子邮件步骤详解
# SQL server 三种常用的触发器
# 所要
# 建立一个
# 借书
# 这两个
# 数据库中
# 是在
# 要在
# 的是
# 还没有
# 是一种
# 多个
# 已有
# 两种
# 可以用
# 而在
# 而不
# 这条
# 言下之意
# 不存在
# 使其
相关文章:
如何撰写建站申请书?关键要点有哪些?
油猴 教程,油猴搜脚本为什么会网页无法显示?
C#怎么创建控制台应用 C# Console App项目创建方法
如何通过虚拟主机快速完成网站搭建?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何快速完成中国万网建站详细流程?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何选择高效可靠的多用户建站源码资源?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
制作门户网站的参考文献在哪,小说网站怎么建立?
如何通过山东自助建站平台快速注册域名?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星如何实现PC+手机+微信网站五合一建站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
在线制作视频的网站有哪些,电脑如何制作视频短片?
红河网站制作公司,红河事业单位身份证如何上传?
已有域名能否直接搭建网站?
如何高效生成建站之星成品网站源码?
七夕网站制作视频,七夕大促活动怎么报名?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在橙子建站上传落地页?操作指南详解
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
,交易猫的商品怎么发布到网站上去?
建站之星免费版是否永久可用?
如何通过商城自助建站源码实现零基础高效建站?
C#如何序列化对象为XML XmlSerializer用法
建站org新手必看:2024最新搭建流程与模板选择技巧
如何用IIS7快速搭建并优化网站站点?
个人摄影网站制作流程,摄影爱好者都去什么网站?
想学网站制作怎么学,建立一个网站要花费多少?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
临沂网站制作公司有哪些,临沂第四中学官网?
建站主机与服务器功能差异如何区分?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站之星下载版如何获取与安装?
简单实现Android文件上传
建站之星价格显示格式升级,你的预算足够吗?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何正确下载安装西数主机建站助手?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站制作网站,深圳做网站哪家比较好?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
建站主机选哪家性价比最高?
如何通过虚拟主机快速搭建个人网站?
如何在阿里云虚拟服务器快速搭建网站?
jQuery 常见小例汇总
*服务器网站为何频现安全漏洞?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
*请认真填写需求信息,我们会在24小时内与您取得联系。