数据库 触发器(超赞)

上传人:wt****50 文档编号:37851222 上传时间:2018-04-23 格式:DOC 页数:11 大小:73.50KB
返回 下载 相关 举报
数据库 触发器(超赞)_第1页
第1页 / 共11页
数据库 触发器(超赞)_第2页
第2页 / 共11页
数据库 触发器(超赞)_第3页
第3页 / 共11页
数据库 触发器(超赞)_第4页
第4页 / 共11页
数据库 触发器(超赞)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据库 触发器(超赞)》由会员分享,可在线阅读,更多相关《数据库 触发器(超赞)(11页珍藏版)》请在金锄头文库上搜索。

1、数据库触发器案例数据库触发器案例一、课堂演示案例一、课堂演示案例 例一:创建一个简单的例一:创建一个简单的 insert 触发器触发器 先创建一个数据库备用 create database sampledb gouse sampledb go在新创建的库中创建一个表备用 create table aa (a int,b int ) go在新创建的表上创建一个 insert 触发器 use sampledb goif exists(select name from sysobjects where name =tr_intoa and type=tr) drop trigger tr_intoa

2、 gocreate trigger tr_intoa on aa for insert as print success inserted one row!查看这个触发器的定义文本 sp_helptext checkpubdate查看这个触发器的信息 sp_help checkpubdate验证这个触发器的工作情况 insert into aa values (1,2) -例二:创建一个触发器监视例二:创建一个触发器监视 insert 操作,若插入的记录中版权费超过操作,若插入的记录中版权费超过 30,则提示用户,并,则提示用户,并 回滚此操作。回滚此操作。use pubs goif exis

3、ts(select name from sysobjects where name =CheckRoyalty and type=tr) drop trigger CheckRoyalty gocreate trigger checkroyalty on roysched for insert as if (select royalty from inserted) 30 begin print royaltytrigger:版权费不能超过 30print 请将版权费修改为小于 30 的值 rollback transaction endinsert into roysched values

4、(BU1032,2,5,90)select * from roysched where title_id=BU1032 -例三:创建一个触发器监视例三:创建一个触发器监视 insert 操作,若插入的记录中出版日期小于当前日期,则提示操作,若插入的记录中出版日期小于当前日期,则提示 用户,并回滚此操作。用户,并回滚此操作。 use pubs goif exists(select name from sysobjects where name =checkpubdate and type=tr) drop trigger checkpubdate gocreate trigger checkpu

5、bdate on titles for insert as if (select pubdate from inserted) 12 beginselect * from inserted -查看内存表中的数据select * from deleted -查看内存表中的数据print 不能指定大于 12% 的折扣rollback transaction end表级 UPDATE 触发器测试 update discounts set discount = 20 where stor_id = 8042 -例六:列级例六:列级 update 触发器示例触发器示例 use northwind go建

6、立登记修改人帐号的表 create table who_change (change_date datetime,change_column varchar(50),who varchar(50) ) go建立触发器 use northwind goif exists(select name from sysobjects where name =tr_orderdetail_insupd and type=tr) drop trigger tr_orderdetail_insupd gocreate trigger tr_orderdetail_insupd on order details

7、 for update as if update (unitprice) begininsert who_changevalues (getdate(),unitprice updated,user_name() end else if update (Quantity)begininsert who_change values(getdate(),quantity updated,user_name() end else if update(discount) begininsert who_change values (getdate(),discount updated,user_nam

8、e() end go测试触发器的工作情况 update order details set unitprice=2 where orderid=10248 and productid=1 update order details set Quantity=4 where orderid=10248 and productid=1 update order details set discount=0 where orderid=10248 and productid=1 -例七:触发器只能在当前数据库中创建。例七:触发器只能在当前数据库中创建。 但是,触发器可以引用其他数据库中的对象。但是,触

9、发器可以引用其他数据库中的对象。 (示例示例) use sampledb go创建表 test 备用 create table test (aa int,bb int ) go向 test 表中插入一些数据备用 insert into test values (1001,0) insert into test values (1002,0) insert into test values (1003,0)创建另一个库备用 create database testdb gouse testdb go在库 testdb 中再创建一个表备用create table test_11 (aa int,b

10、b int ) go在 testdb 库中的表 test_11 上创建一个 insert 触发器 use testdb goif exists(select name from sysobjects where name =tri_test and type=tr) drop trigger tri_test gocreate trigger tri_test on test_11 for insert asupdate sampledb.dbo.testset bb=bb+(select bb from inserted)where aa= (select aa from inserted)

11、测试触发器的工作情况 insert into test_11 values (1002,2)insert into test_11 values (1001,1) -例八:例八:DELETE 触发器示例触发器示例 use testdb goif exists(select name from sysobjects where name =NoDelete9901 and type=tr) drop trigger NoDelete9901 gocreate trigger NoDelete9901 on pub_info for delete AS if (select pub_id from

12、 deleted) = 9901 beginprint 不能删除出版商 9901 的详细信息rollback transaction endDELETE 触发器示例测试 delete pub_info where pub_id = 9901 -例九:视图上的例九:视图上的 INSTEAD OF 触发器示例触发器示例 use pubs goselect * into bak_employee from employee select * into bak_publishers from publisherscreate view Emp_pub as select emp_id, lname,

13、job_id, pub_name from bak_employee e, bak_publishers p where e.pub_id = p.pub_idcreate trigger del_emp on Emp_pub instead of delete asselect * from deleted -查看内存表中的数据delete bak_publishers where emp_id in (select emp_id from deleted)视图上的 INSTEAD OF 触发器示例测试 delete Emp_pub -例十:表上的例十:表上的 INSTEAD OF 触发器示例触发器示例 use pubs goif exists(select name from sysobjects where name =tri_deltitle and type=tr) drop trigger tri_deltitle gocreate trigger tri_deltitle on titles instead of delete as print

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号