触发器——有关添加、删除时,将统计行数加到另一个表的问题

yeag 2003-08-25 02:23:25
想写一个触发器实现这个功能:添加、删除时,将与某一字段相同的值进行统计,并更新到另一个表中。
我的触发器如下,但结果是另一个表并未更新,请问这是为什么。
rl_contract是欲添加、删除数据的表。client_ywy是要更新的表。
添加触发器:
declare @str_code varchar
declare @int_count integer
declare @errno integer,@errmsg varchar(255), @numrows int
select @numrows = @@rowcount
if @numrows = 0 return
select @str_code= inserted.client_code from inserted
select @int_count=count(*) from rl_contract where client_code=@str_code
select @int_count=@int_count+count(*) from inserted where client_code=@str_code
update client_ywy set times=@int_count where client_code=@str_code

删除触发器:
declare @str_code varchar(10)
declare @int_count integer
declare @errno integer,@errmsg varchar(255)
select @str_code= inserted.client_code from inserted
select @int_count=count(*) from rl_contract where client_code=@str_code
select @int_count=@int_count-count(*) from inserted where client_code=@str_code
update client_ywy set times=@int_count where client_code=@str_code
if @@error <> 0 goto error
return
error: raiserror @errno @errmsg
rollback transaction
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeag 2003-08-25
  • 打赏
  • 举报
回复
谢谢大力。
同时请问 (东方不败猪八戒)(西方失败唐老鸭),你的方法对于正在删除、添加的数据会不统计来。
hjb111 2003-08-25
  • 打赏
  • 举报
回复
create trigger T_InsertDel on r1_contract from insert,delete
as
update client_ywy set colname=select sum(colname) from r1_contract
go
pengdali 2003-08-25
  • 打赏
  • 举报
回复

删除触发器:
update client_ywy set times=client_ywy.times-a.row from (select client_code,count(*) row from deleted group by client_code) a where a.client_code=client_ywy.client_code
pengdali 2003-08-25
  • 打赏
  • 举报
回复
删除触发器:

update client_ywy set times=client_ywy.times-a.row from (select client_code,count(*) row from deleted group by client_code) a where a.client_code=client_ywy.client_code
pengdali 2003-08-25
  • 打赏
  • 举报
回复
添加触发器:
update client_ywy set times=client_ywy.times+a.row from (select client_code,count(*) row from inserted group by client_code) a where a.client_code=client_ywy.client_code


删除触发器:
update client_ywy set times=client_ywy.times-a.row from (select client_code,count(*) row from inserted group by client_code) a where a.client_code=client_ywy.client_code
liuyun2003 2003-08-25
  • 打赏
  • 举报
回复
代码太长,等晚上看。
txlicenhe 2003-08-25
  • 打赏
  • 举报
回复
不要if @numrows = 0 return ?

22,209

社区成员

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

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