您的位置:首页 > 数据库

Day 9:(14) 触发器实训_参考答案

2015-11-23 00:04 591 查看
-- 触发器实训_参考答案

-- 1. 在tbl1表( create table tbl1(col1 char(10),col2 char(10)))上创建三个触发器 
-- after insert 触发器(当执行insert语句时触发,并显示'after insert 触发器')
-- after update 触发器(当执行update语句时触发,并显示'after update 触发器')
-- after delete 触发器(当执行delete语句时触发,并显示'after delete 触发器')
-- 执行insert tbl1 values('a','b'),验证是否显示 'after insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl1 set col1 = 'c',col2= 'd',验证是否显示 'after update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl1 ,验证是否显示 'after delete 触发器',并使用select * from tbl1查看记录

create table tbl1

(col1 char(10),

col2 char(10))

go

create trigger tr_insert

on tbl1

after insert

as 

print 'after insert 触发器'

go

create trigger tr_update

on tbl1

after update

as 

print 'after update 触发器'

go

create trigger tr_delete

on tbl1

after delete

as 

print 'after delete 触发器'

go

insert tbl1 values('a','b')

go

update tbl1

set col1 = 'c',

col2= 'd'

go

delete from tbl1

go

select * from tbl1

go

drop trigger tr_insert

drop trigger tr_update 

drop trigger tr_delete

go

-- 2. 在tbl2表( create table tbl2(col1 char(10),col2 char(10)))上创建三个触发器 
-- instead of insert 触发器(当执行insert语句时触发,并显示'instead of insert 触发器')
-- instead of update 触发器(当执行update语句时触发,并显示'instead of update 触发器')
-- instead of delete 触发器(当执行delete语句时触发,并显示'instead of delete 触发器')
-- 执行insert tbl2 values('a','b'),验证是否显示 'instead of insert 触发器',并使用select * from tbl1查看记录
-- 执行update tbl2 set col1 = 'c',col2= 'd',验证是否显示 'instead of update 触发器',并使用select * from tbl1查看记录
-- 执行delete from tbl2 ,验证是否显示 'instead of delete 触发器',并使用select * from tbl1查看记录

create trigger tr_insert

on tbl2

instead of insert

as 

print 'instead of insert  触发器'

go

create trigger tr_update

on tbl2

instead of update

as 

print 'instead of update 触发器'

go

create trigger tr_delete

on tbl2

instead of delete

as 

print 'instead of delete 触发器'

go

insert tbl2 values('a','b')

go

select * from tbl2

update tbl2

set col1 = 'c',

col2= 'd'

go

delete from tbl2

go

drop trigger tr_insert

drop trigger tr_update 

drop trigger tr_delete

-- 3. 在test数据库的course表上创建一个INSERT触发器inse_c_data,

   -- 如果插入的记录的c_hour字段值小于50,则提示'学时不能小于50',不做插入操作,并验证

create trigger inse_c_data on course after insert as 

if(select c_hour from inserted)<50

begin

print '学时不能小于50'

rollback

end

insert into course values('100107','概率论',4,40,'宋佳')

select * from course

insert into course values('100107','概率论',4,60,'宋佳')

-- 4. 查看inse_c_data的定义信息

sp_helptext inse_c_data

-- 5. 修改触发器inse_c_data,加密定义文本,并验证

alter trigger inse_c_data on course with encryption after insert as 

if(select c_hour from inserted)<50

begin

print '学时不能小于50'

rollback

end

sp_helptext inse_c_data

-- 6. 查看触发器inse_c_data的信息

sp_help inse_c_data

-- 7. 查看触发器inse_c_data的相关性

sp_depends inse_c_data

-- 8. 重命名触发器inse_c_data为inse_course_date

sp_rename inse_c_data,inse_course_data

-- 9. 删除触发器inse_course_data

drop trigger inse_course_data

-- 10. 在test数据库的course表上创建一个UPDATE触发器update_c_data,

   -- 如果插入的记录的c_credit字段值大于10,则提示'学分不能大于10',不做插入操作,并验证

create trigger update_c_data on course after update as

if update(c_credit) 

begin

  if(select c_credit from inserted)>10

    begin

    print '学分不能大于 10'

    rollback

    end

end

update course set c_credit=19 where  c_number='100101'

-- 11. 在test数据库的stu_info表上创建一个INSERT、UPDATE触发器tri_gender,使输入的性别只能为'男' 或 '女',并验证

create trigger tri_gender on stu_info

for insert,update as

if update(t_gender)

begin

  if(select t_gender from inserted) not in('男','女')

  print '性别错误'

  rollback

end

-- 插入记录

insert into stu_info values('20040307','王静','王','1984-12-12')

-- 提示“性别错误”,不进行插入操作

select * from stu_info

-- 修改记录

update stu_info set t_gender='wn' where t_number='20040301'

select * from stu_info

-- 12. 在test数据库的course表上创建INSTEAD OF触发器not_dele_c,使不能删除course表的记录

create trigger not_dele_c on course instead of delete as print'不能删除course表的记录'

-- 删除一条记录

delete from course where c_number='100101'

-- 思考题:设计一个叫号功能,

  --设计表并在该表上创建一个触发器,能自动生成编号,并且记录叫号的时间,编号从1开始,到10就重新从1开始

create table sss(seq int identity(1,1),s_name varchar(20),sdate datetime default(getdate()))

insert into sss(s_name) values('ss') 

select * from sss

create trigger insert_sss on sss after insert as 

if(@@identity)>10

begin

  truncate table sss

  insert into  sss(s_name) values('ss')

end 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server 数据库