SQL sever 触发器

一: 触发器 是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新 记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 二: SQL Server 为每个触发器都创建了两个专用表 :Inserted表和Deleted表。这两个表。 一 : 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新 记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 二: SQL Server 为每个触发器都创建了两个专用表:Inserted表和Deleted表。 这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作 用的表的结构相同。触发器执行完成后﹐与该触发器相关的这两个表也被删除。 使用T-SQL语句来创建触发器 基本语句如下: create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,delete ] as sql_statement 六:删除触发器: 基本语句如下 drop trigger trigger_name 查看数据库中已有触发器: 查看数据库已有触发器 use jxcSoftware select * from sysobjects where xtype='TR' 查看单个触发器 exec sp_helptext ' 触发器名 修改触发器: alter trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,delete ] as sql_statement create trigger orderinsert on orders after insert as if (select status from goods,inserted where goods.name=inserted.goodsname)=1 begin print 'the goods is being processed' print 'the order cannot be committed' rollback transaction -- 回滚﹐避免加入 end 在Orders 表建立一个插入触发器﹐在添加一条订单时﹐减少 Goods表相应的货品记录中的库存 create trigger orderinsert1 on orders after insert as update goods set storage=storage-inserted.quantity from goods,inserted where goods.name=inserted.goodsname 在Goods表建立删除触发器﹐实现 Goods 表和Orders表的级联删除。 create trigger goodsdelete on goods after delete as selete from orders where goodsname in (select name from deleted) 在Orders表建立一个更新触发器﹐监视 Orders 表的订单日期 (OrderDate) 列﹐使其不 能手工修改 create trigger orderdateupdate on orders after update as if update(orderdate) begin raiserror(' orderdate cannot be modified',10,1) rollback transaction end 在Orders 表建立一个插入触发器﹐保证向 Orders表插入的货品名必须要在Goods表中一定存在。 create trigger orderinsert3 on orders after insert as if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0 begin print ' no entry in goods for this order' rollback transaction end Orders 表建立一个插入触发器,保证向 Orders表插入的货品信息要在Order表中添加 alter trigger addOrder on Orders

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2015-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

触发器在渗透中的利用

0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的...

3355
来自专栏运维小白

13.3 mysql常用命令

mysql常用命令目录概要 查询库 show databases; 切换库 use mysql; 查看库里的表 show tables; 查看表里的字段 des...

1938
来自专栏深度学习之tensorflow实战篇

数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。 1. 数据查询语言DQL 数据查询语言DQL基本结构...

3619
来自专栏杨建荣的学习笔记

sqlldr批量导入导出数据测试(86天)

sqlldr是在处理大数据量的操作中建议采用的方式,它有许多性能想关的开关,能最大程度的减少redo,undo的生成,控制数据的处理方式(insert,appe...

3839
来自专栏杨建荣的学习笔记

数据紧急修复之启用错误日志 (r2第12天)

昨晚对测试环境进行了升级,同步了部分生产的数据。整个过程比较顺利,但是在最后一步启用foreign key constraint的时候报了错误。 ora-022...

2799
来自专栏杨建荣的学习笔记

闪回归档的简单测试(r8笔记第68天)

11g里面的新特性闪回归档,为历史数据的定制查询提供了一种可能。抽时间学习了一下这个特性,发现还是比较清晰易用。如果使用得当还是很不错的一个特性。 我们来简单模...

3165
来自专栏乐沙弥的世界

ORA-00942: table or view does not exist

      在过程,包,函数,触发器中调用Oracle相关动态性能视图时,需要授予适当的权限,否则会收到表和视图不存在的错误提示。即使你可以单独查询这些视图。因...

1182
来自专栏Ryan Miao

Ubuntu18.04(linux)安装MySQL

Ubuntu18.04 安装mysql或者mariadb之后,发现普通用户和远程都没有权限连接。

1032
来自专栏运维

zabbix2.4.5迁移到zabbix3.0

http://qicheng0211.blog.51cto.com/3958621/1744603

1423
来自专栏沃趣科技

mysqldump与innobackupex备份过程你知多少(一)

导语 1、先看mysqldump 1.1. mysqldump备份过程解读 1.2. mysqldump备份过程中的关键步骤 1.2.1. FLUS...

4249

扫码关注云+社区