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 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle 表空间与数据文件

SYSAUX --->10g 高并发系统繁忙时,会造成system争用,将工具放到SYSAUX,减轻system的压力,SYSAUX不影响系统(影响性能)

795
来自专栏乐沙弥的世界

PGA的设置与调整

    PGA,即程序全局区(Program Global Area),是Oracle体系机构的重要组成部分。Oracle 数据库对系统内存的总开销即是PGA+...

502
来自专栏乐沙弥的世界

日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)

--==================================================

631
来自专栏IT综合技术分享

postgresql-xl基础命令整合

参考地址 https://www.postgres-xl.org/documentation/tutorial-createcluster.html

542
来自专栏ml

HDU-----(1083)Courses(最大匹配)

Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

2537
来自专栏沃趣科技

MySQL复制应用中继日志解析

一、从一张图开始 从一个大神那边得到一张图片,SQL线程应用中继日志流程,下面就实验验证一下:(PS,我个人认为这张图binlog_format为ROW格式是正...

4166
来自专栏吴伟祥

MySQL 存储引擎 原

使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。

541
来自专栏Java 技术分享

WEB 小案例 -- 网上书城(一)

2765
来自专栏运维技术迷

MySQL数据库(五):索引

一.什么是索引 相当于一本数的目录 二.使用索引的好处和坏处 好处:加快查找速度 坏处:占用磁盘空间 三.查看索引命令 命令格式: show inde...

2649
来自专栏Laoqi's Linux运维专列

Mysql中MyISAM引擎和InnoDB引擎的比较

结论 如果不清楚自己应该用什么引擎,那么请选择InnoDB,Mysql5.5+的版本默认引擎都是InnoDB,早期的Mysql版本默认的引擎是MyISAM --...

3386

扫描关注云+社区