关于after触发器的问题
时间:2011-12-27
来源:互联网
after触发器能否对 表里某一项里面的内容插入或更新之后 触发
比如 说有这么两个表
借阅信息 归还书籍
图书编号 char(50) 图书编号 char(50)
借书证号 char(50) 借书证号 char(50)
借书时间 smalldatetime 借书时间 smalldatetime
应还时间 smalldatetime 归还时间 smalldatetime
归还时间 smalldatetime
已借书数目 smallint
可借书数目 smallint
能不能实现在 借阅信息中的归还时间被插入后 将 图书编号 借书证号 借书时间 归还时间 输入到 归还书籍 表中
由于已经有一个类似的触发器用于另一个表了 所以说如果不能实现以上要求的话 是不是只能另建一表用于归还书籍表了?
请各位指点一下 谢谢
比如 说有这么两个表
借阅信息 归还书籍
图书编号 char(50) 图书编号 char(50)
借书证号 char(50) 借书证号 char(50)
借书时间 smalldatetime 借书时间 smalldatetime
应还时间 smalldatetime 归还时间 smalldatetime
归还时间 smalldatetime
已借书数目 smallint
可借书数目 smallint
能不能实现在 借阅信息中的归还时间被插入后 将 图书编号 借书证号 借书时间 归还时间 输入到 归还书籍 表中
由于已经有一个类似的触发器用于另一个表了 所以说如果不能实现以上要求的话 是不是只能另建一表用于归还书籍表了?
请各位指点一下 谢谢
作者: begun0608 发布时间: 2011-12-27
这个能实现,我有一个简单的例子,你可以参考一下:
--创建触发器实现删除主表中的数据时自动删除附表中的数据:
--创建表tbl_stu:
create table tbl_stu(
stuid varchar(15) primary key,
stuname varchar(20) not null
)
--插入数据:
insert into tbl_stu values('200911076','李白和')
insert into tbl_stu values('200911077','王洪洋')
--创建表tbl_score:
create table tbl_score(
stuid varchar(15)
foreign key
references tbl_stu(stuid)
not null,
Math int default(0)
)
--插入数据:
insert into tbl_score values('200911076',85)
insert into tbl_score values('200911077',95)
--创建视图v_view:
create view v_view
as
select
s.stuid,s.stuname,sc.math
from
tbl_stu s,tbl_score sc
where
s.stuid=sc.stuid
--为视图创建触发器tr_delete:
create trigger tr_delete on v_view
instead of delete
as
declare @stuid varchar(15),@stuname varchar(20),
@math int
select @stuid=stuid,@stuname=stuname,@math=math
from deleted
delete tbl_score where stuid=@stuid
delete tbl_stu where stuid=@stuid
--验证是否删除两表中对应的所有信息
delete v_view where stuid='200911077'
select *from tbl_stu
select *from tbl_score
--创建触发器实现删除主表中的数据时自动删除附表中的数据:
--创建表tbl_stu:
create table tbl_stu(
stuid varchar(15) primary key,
stuname varchar(20) not null
)
--插入数据:
insert into tbl_stu values('200911076','李白和')
insert into tbl_stu values('200911077','王洪洋')
--创建表tbl_score:
create table tbl_score(
stuid varchar(15)
foreign key
references tbl_stu(stuid)
not null,
Math int default(0)
)
--插入数据:
insert into tbl_score values('200911076',85)
insert into tbl_score values('200911077',95)
--创建视图v_view:
create view v_view
as
select
s.stuid,s.stuname,sc.math
from
tbl_stu s,tbl_score sc
where
s.stuid=sc.stuid
--为视图创建触发器tr_delete:
create trigger tr_delete on v_view
instead of delete
as
declare @stuid varchar(15),@stuname varchar(20),
@math int
select @stuid=stuid,@stuname=stuname,@math=math
from deleted
delete tbl_score where stuid=@stuid
delete tbl_stu where stuid=@stuid
--验证是否删除两表中对应的所有信息
delete v_view where stuid='200911077'
select *from tbl_stu
select *from tbl_score
作者: TravyLee 发布时间: 2011-12-27
建立for update触发器
在触发器中用if update(归还时间) 判断修改的是归还时间字段,然后下面写插入的insert语句
在触发器中用if update(归还时间) 判断修改的是归还时间字段,然后下面写插入的insert语句
作者: pengxuan 发布时间: 2011-12-27
SQL code
if object_id('借阅信息') is not null drop table 借阅信息 go create table 借阅信息 ( 图书编号 char(50), 借书证号 char(50), 借书时间 smalldatetime, 应还时间 smalldatetime, 归还时间 smalldatetime, 已借书数目 smallint, 可借书数目 smallint ) go insert into 借阅信息 select '1','1','2011-11-11','2011-11-15',null,1,1 --建立update触发器 if object_id('tr_借阅信息') is not null drop trigger tr_借阅信息 go create trigger tr_借阅信息 on 借阅信息 for update as if update(归还时间) insert into 归还书籍 select 图书编号,借书证号,借书时间,归还时间 from inserted go if object_id('归还书籍') is not null drop table 归还书籍 go create table 归还书籍 ( 图书编号 char(50), 借书证号 char(50), 借书时间 smalldatetime, 归还时间 smalldatetime ) go --更新归还时间,触发器自动执行插入 update 借阅信息 set 归还时间='2011-11-14' where 图书编号=1 select * from 归还书籍 /* 图书编号 借书证号 借书时间 归还时间 -------------------------------------------------- -------------------------------------------------- ----------------------- ----------------------- 1 1 2011-11-11 00:00:00 2011-11-14 00:00:00 (1 行受影响) */
作者: pengxuan 发布时间: 2011-12-27
数据库设计得不太好.
1.已借书数目,可借书数目,是读者表中的内容,而不是借书表中的内容.
2.一本书,一个编号,因此,没有必要另外再设置归还书籍表,直接在借书表中就能包含借书操作的所有属性了.
1.已借书数目,可借书数目,是读者表中的内容,而不是借书表中的内容.
2.一本书,一个编号,因此,没有必要另外再设置归还书籍表,直接在借书表中就能包含借书操作的所有属性了.
作者: qianjin036a 发布时间: 2011-12-27
这个是谁设计的?第一个表明显可以再分。我写了一个简单的实现方法,具体的你可以修改:
/*
after触发器能否对表里某一项里面的内容插入或更新之后触发
比如说有这么两个表
借阅信息表(borrowinfo) 归还书籍表(returninfo)
图书编号 char(50) 图书编号 char(50)
借书证号 char(50) 借书证号 char(50)
借书时间 smalldatetime 借书时间 smalldatetime
应还时间 smalldatetime 归还时间 smalldatetime
归还时间 smalldatetime
已借书数目 smallint
可借书数目 smallint
*/
go
if OBJECT_ID('borrowinfo') is not null
drop table borrowinfo
go
create table borrowinfo(
图书编号 char(50),
借书证号 char(50),
借书时间 smalldatetime ,
应还时间 smalldatetime,
归还时间 smalldatetime,
已借书数目 smallint,
可借书数目 smallint
)
--select *from borrowinfo
go
if OBJECT_ID('returninfo') is not null
drop table returninfo
go
create table returninfo(
图书编号 char(50),
借书证号 char(50),
借书时间 smalldatetime,
归还时间 smalldatetime
)
go
if object_id('tri_update')is not null
drop trigger tri_update
go
create trigger tri_update on borrowinfo
after insert,update
as
declare @图书编号 char(50),@借书证号 char(50),
@借书时间 smalldatetime,@归还时间 smalldatetime,
@已借书数目 smallint,@可借书数目 smallint
--当有人借书时执行insert操作
if not exists(select *from deleted)--如果是新插入
select @图书编号=图书编号,@借书证号=借书证号,
@借书时间=借书时间,@归还时间=归还时间,
@已借书数目=已借书数目,@可借书数目=可借书数目 from inserted
insert into returninfo(图书编号,借书证号,借书时间,归还时间)
values(@图书编号,@借书证号,@借书时间,@归还时间)
--当有人还书时执行update操作
if(select count(*) from deleted)>0 and (select count(*) from inserted)>0--如果是更新
select @图书编号=图书编号,@借书证号=借书证号,
@借书时间=借书时间,@归还时间=归还时间,
@已借书数目=已借书数目,@可借书数目=可借书数目 from inserted
update returninfo set 归还时间=@归还时间 where 借书证号=@借书证号
/*
after触发器能否对表里某一项里面的内容插入或更新之后触发
比如说有这么两个表
借阅信息表(borrowinfo) 归还书籍表(returninfo)
图书编号 char(50) 图书编号 char(50)
借书证号 char(50) 借书证号 char(50)
借书时间 smalldatetime 借书时间 smalldatetime
应还时间 smalldatetime 归还时间 smalldatetime
归还时间 smalldatetime
已借书数目 smallint
可借书数目 smallint
*/
go
if OBJECT_ID('borrowinfo') is not null
drop table borrowinfo
go
create table borrowinfo(
图书编号 char(50),
借书证号 char(50),
借书时间 smalldatetime ,
应还时间 smalldatetime,
归还时间 smalldatetime,
已借书数目 smallint,
可借书数目 smallint
)
--select *from borrowinfo
go
if OBJECT_ID('returninfo') is not null
drop table returninfo
go
create table returninfo(
图书编号 char(50),
借书证号 char(50),
借书时间 smalldatetime,
归还时间 smalldatetime
)
go
if object_id('tri_update')is not null
drop trigger tri_update
go
create trigger tri_update on borrowinfo
after insert,update
as
declare @图书编号 char(50),@借书证号 char(50),
@借书时间 smalldatetime,@归还时间 smalldatetime,
@已借书数目 smallint,@可借书数目 smallint
--当有人借书时执行insert操作
if not exists(select *from deleted)--如果是新插入
select @图书编号=图书编号,@借书证号=借书证号,
@借书时间=借书时间,@归还时间=归还时间,
@已借书数目=已借书数目,@可借书数目=可借书数目 from inserted
insert into returninfo(图书编号,借书证号,借书时间,归还时间)
values(@图书编号,@借书证号,@借书时间,@归还时间)
--当有人还书时执行update操作
if(select count(*) from deleted)>0 and (select count(*) from inserted)>0--如果是更新
select @图书编号=图书编号,@借书证号=借书证号,
@借书时间=借书时间,@归还时间=归还时间,
@已借书数目=已借书数目,@可借书数目=可借书数目 from inserted
update returninfo set 归还时间=@归还时间 where 借书证号=@借书证号
作者: TravyLee 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28