sqlsever ,触发器的练习




学生表,成绩表,课程表,班级表

--1、 删除xs表中birth字段的check约束,并建立insert类型的触发器,
select *from xs
--实现,如果插入的记录的birth字段不处在1980-1-1至1991-12-31之间,进行操作回滚,并提示错误信息。
alter table xs  drop constraint   CK_xs_birth
drop trigger Tri_name
go
create trigger Tri_name
on xs
 for insert
 as
 declare @birth datetime
 set @birth=(select xs_birth from inserted)
 if(@birth>='1980-1-1' and @birth<='1990-12-31')
    print @birth
  else
   rollback transaction
 raiserror('错误失败',10,1)
go
insert into xs values('037','刘s',1,'1990-12-1','重庆','004',1.33,23.4)
select *from xs
--2、在xs表上建立insert触发器,每次成功插入一条记录时,对class表中的xs_count字段值要+1。
select *from xs
go
create trigger taker
on xs for insert
as
if(update(xs_class))
declare @classID nchar(20)
set @classID=(select xs_class from inserted)
update class set xs_count=xs_count+1
 where class_id=@classID
go
drop trigger taker
insert into xs values('039','刘小',1,'1990-12-1','重庆','004',1.33,23.4)
select *from xs
select *from class
--3 、在xs表上建立delete触发器,每次成功删除一条记录时,对class表中的xs_count字段值要-1。
go
create trigger deletes
on xs for delete
as
if(update(xs_class))
declare @stu char(20)
set @stu=(select top 1 xs_class from deleted)
update class set xs_count=xs_count-1
 where class_id=@stu
go
drop trigger deletes
delete from xs where xs_id='009'
select *from class
select *from xs
--4 、取消cj表中的外键约束,改用cj表的insert触发器实现当
--cj表的kc_xs_id,id在xs表和kc表中找不到对应的xs_id,kc_id时,进行操作回滚,并提示错误信息。
alter table cj  drop constraint   FK_cj_xs
select * from xs
go
alter trigger T_cj_update
on cj for insert
as
begin
declare @xs_id char(6),@kc_id char(3)
set @xs_id=(select xs_id from inserted)
set @kc_id=(select kc_id from inserted)
if(@xs_id in(select xs_id from xs ) and @kc_id in(select kc_id from kc))
print '成功插入数据'
else
begin
 rollback
 raiserror('错误失败',10,1)
 end
 end
go

drop trigger
select * from cj
select * from xs
select * from kc
delete from cj where cj=1000
insert into cj values ('015','005',1000)
--5 、在kc表上建立update触发器,如果修改kc表的kc_id字段时,
--update操作回滚,并提示不能修改kc_id的错误信息。
go
create trigger t_update
on kc for update
as
begin
if(update(kc_id))
 rollback
 raiserror('无法修改',10,1)
 end
go
update kc set kc_id='001'  where kc_id='009'
select *from kc
--6 、在xs表上建立update触发器,如果修改xs表的xs_id字段时,
--cj表中对应的xs_id也进行相应的修改。
go
create trigger t_update_xs
on xs for update
as
begin
declare @xs_id char(10)
declare @new_id char(10)
set @xs_id=(select  xs_id from inserted)
set @new_id=(select xs_id from deleted)
if(@xs_id!=@new_id)
 begin
 update cj set xs_id=@xs_id where xs_id=@new_id
 print '学生ID已经修改'
end
end
go
drop trigger t_update_xs
select * from xs where xs_id='001'
update xs set xs_id='001'  where xs_id='099'
select *from cj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值