您的位置:首页 > 其它

关于触发器的问题?

2004-11-17 15:23 411 查看
情况时这样的,现在我有这样个问题,
我想在sql server2000下建立这样的触发器

表一:a表二:b
表一中有这样的字段:mname,mmoney(int not null,int)
表二中有这样的字段:gname,gf(int,int)
我希望在表二上建立触发器,当在往表二中插入字段时
对表一进行更新:将插入在表二记录中的mname=gname的mmoney的值
自动加在表一的gf字段上作为更新后的值.这个触发器怎么建立。
谢谢!!!
---------------------------------------------------------------

create trigger utg_test
on tableb
for insert,update
as
update tablea set gf=(select mmoney from tableb where tableb.mname=tablea.gname)
go
---------------------------------------------------------------

CREATE TRIGGER tr_in ON [dbo].[B]
FOR INSERT
AS
Update A set A.mmoney=A.mmoney+isnull((select sum(gf) from inserted M where M.gname=A.mname),0)

---------------------------------------------------------------

很好做呀!
对B的INSERT做一个触发器.
从INSERTED临时表中取得@gname,@gf(对应列的值)
update a set mmoney = mmoney + gf where mname = gname
---------------------------------------------------------------

好像都没有写对:
CREATE TRIGGER tr_in ON [dbo].[B]
FOR INSERT
AS
Update A
set mmoney=A.mmoney+M.gf
from inserted M
where M.gname=A.mname

---------------------------------------------------------------

TO CSDNM:
I think your trigger have some troube.
IF not use sum, There must be some error when Table B update with insert from a subselect. or another word, when B update use as the following your trigger can not get right result.

insert b(gname,gf) (SELECT 1,3 union select 1,5)
---------------------------------------------------------------

ok!

CREATE TRIGGER tr_in ON [dbo].[B]
FOR INSERT
AS
Update A
set mmoney=A.mmoney+M.gf
from (select gname,sum(gf) as gf from inserted group by gname) M
where M.gname=A.mname

你的触发器结果应该是对的,但是每次插入更新了整个A表,速度可能不能接受.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: