关于update和insert,下面上实例,求赐教

initsself 2012-11-12 09:00:47
我建有两个触发器,一个是insert,另一个是update,在实验的时候,发现insert可以正常处理,而update就重复操作了,比如我往借阅信息表中添加一条记录,状态为未还,insert的触发器使得5变为4,而如果修改状态为已还,4就变为6了,请大神指教一下,个人感觉就是insert和update的问题下面上代码

ALTER TRIGGER [dbo].[before_insert_jieyue1] ON [dbo].[借阅信息表]
FOR insert
AS
IF EXISTS ( SELECT 1
FROM dbo.借阅信息表
WHERE 读者编号 IN ( SELECT 读者编号
FROM inserted )
AND 状态 IN ( '未还' ) )
BEGIN
update dbo.读者信息表
set 当前可借数=当前可借数-1
where 读者编号=(select 读者编号 from inserted)
update dbo.读者信息表
set 借阅次数=借阅次数+1
where 读者编号=(select 读者编号 from inserted)
update dbo.图书资料表
set 馆内剩余本数=馆内剩余本数-1
where 图书编号=(select 图书编号 from inserted)
end
这是insert的,下面是update的

ALTER TRIGGER [dbo].[before_insert_jieyue] ON [dbo].[借阅信息表]
FOR update
AS
IF EXISTS ( SELECT 1
FROM dbo.借阅信息表
WHERE 读者编号 IN ( SELECT 读者编号
FROM inserted )
AND 状态 IN ( '已还' ) )
BEGIN
update dbo.读者信息表
set 当前可借数=当前可借数+1
where 读者编号=(select 读者编号 from inserted)
update dbo.图书资料表
set 借出次数=借出次数+1
where 图书编号=(select 图书编号 from inserted)
update dbo.图书资料表
set 馆内剩余本数=馆内剩余本数+1
where 图书编号=(select 图书编号 from inserted)
end
...全文
167 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
initsself 2012-11-12
  • 打赏
  • 举报
回复
有木有大神,这问题很幼稚吗?
initsself 2012-11-12
  • 打赏
  • 举报
回复
引用 3 楼 jamesyue2008 的回复:
update是先delete,再insert. 所以用一个触发器就可以了。
经过试验,还是原样,没有改变什么,只是少了个触发器
initsself 2012-11-12
  • 打赏
  • 举报
回复
引用 3 楼 jamesyue2008 的回复:
update是先delete,再insert. 所以用一个触发器就可以了。
你是说直接用update,可以插入新记录吗?
jamesyue2008 2012-11-12
  • 打赏
  • 举报
回复
update是先delete,再insert. 所以用一个触发器就可以了。
快溜 2012-11-12
  • 打赏
  • 举报
回复
if update(状态)
着魔 2012-11-12
  • 打赏
  • 举报
回复
好好检查一下子查询 是不是表之间相互影响了

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧