数据库触发器(非常好,力荐)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库触发器实例

一、课堂演示案例

例一:创建一个简单的insert触发器

先创建一个数据库备用

create database sampledb

go

use sampledb

go

在新创建的库中创建一个表备用

create table aa

(

a int,

b int

)

go

在新创建的表上创建一个insert触发器

use sampledb

go

if exists(select name from sysobjects where name ='tr_intoa' and type='tr') drop trigger tr_intoa

go

create 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

go

if exists(select name from sysobjects where name ='CheckRoyalty' and type='tr')

drop trigger CheckRoyalty

go

create trigger checkroyalty

on roysched

for insert as

if (select royalty from inserted) > 30

begin

print 'royaltytrigger:版权费不能超过30'

print '请将版权费修改为小于30 的值'

rollback transaction

end

insert into roysched values ('BU1032',2,5,90)

select * from roysched where title_id='BU1032'

----------------------------------------------------------------------------------------------------------------------

例三:创建一个触发器监视insert操作,若插入的记录中出版日期小于当前日期,则提示用户,并回滚此操作。

use pubs

go

if exists(select name from sysobjects where name ='checkpubdate' and type='tr')

drop trigger checkpubdate

go

create trigger checkpubdate

on titles

for insert as

if (select pubdate from inserted) < getdate()

begin

select * from inserted --查看内存表中的数据

print '出版日期小于当前日期'

rollback transaction

触发器示例测试

insert into titles(title_id,title,type,pubdate)

values('SW0001','test book','business','1990-1-1')

select * from inserted

----------------------------------------------------------------------------------------------------------------------

例四:列级update触发器示例

use pubs

go

if exists(select name from sysobjects where name ='NoUpdatePayterms' and type='tr')

drop trigger NoUpdatePayterms

go

CREATE TRIGGER NoUpdatePayterms

ON sales

FOR UPDATE AS

IF UPDATE (payterms)

BEGIN

PRINT '不能修改订单的付费条款'

ROLLBACK TRANSACTION

END

测试触发器的工作情况

update sales set qty=8

where stor_id='6380' and

ord_num='6871' and

title_id='BU1032'

update sales set payterms='aa'

where stor_id='6380' and

ord_num='6871' and

title_id='BU1032'

----------------------------------------------------------------------------------------------------------------------

例五:表级update触发器实例

use pubs

go

if exists(select name from sysobjects where name ='NoUpdateDiscount' and type='tr')

drop trigger NoUpdateDiscount

相关文档
最新文档