一个很简单的问题,关于触发器的,帮看看

hlddg 2006-08-20 06:46:09
CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
declare @fbxh decimal(18),
@fbyjje money,@fbjmje money
select @fbxh=收费编号,@fbyjje=已交金额,@fbjmje=减免金额 from inserted
update main_sfzb set 已交金额=已交金额+@fbyjje,减免金额=减免金额+@fbjmje where 收费编号=@fbxh

这个是我写的一个触发器,在对表main_sffb插入数据的时候同时更新main_sfzb的相关数据
问题是这样的:我用SQL语句:insert main_sffb( 字段) 插入多条数据,数据已经插入了,可是在 main_sfzb中只对第一条满足的记录做了更新,其他的都没变,清高手帮看看有什么问题?
...全文
206 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2006-08-20
  • 打赏
  • 举报
回复
上述要求完全不用游标,直接用表关联更新即可。

CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
update main_sfzb set
已交金额=isnull(已交金额,0) + isnull(B.已交金额,0),
减免金额=isnull(减免金额,0) + isnull(B.减免金额,0)
FROM main_sfzb A inner join
(select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
on A.收费编号=B.收费编号

十一月猪 2006-08-20
  • 打赏
  • 举报
回复
估计Sql的Insert Trigger的机制是这样,
当插入很多条数据的时候,把所有插入的数据
写如Inserted ,触发器只执行一次,而不是插入几条数据
就执行几次触发器的内容,估计是这样

;)

期待高手
i9988 2006-08-20
  • 打赏
  • 举报
回复
CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
update main_sfzb
set 已交金额=a.已交金额+b.已交金额,
减免金额=a.减免金额+b.减免金额
from main_sfzb a,inserted b
where a.收费编号=b.收费编号

go
zsforever 2006-08-20
  • 打赏
  • 举报
回复
--上面错了
--try
CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
update main_sfzb
set main_sfzb.已交金额=main_sfzb.已交金额+B.已交金额,main_sfzb.减免金额=main_sfzb.减免金额+B.减免金额
FROM main_sfzb,(select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
where main_sfzb.收费编号=B.收费编号
zsforever 2006-08-20
  • 打赏
  • 举报
回复
--try
CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
update main_sfzb
set main_sfzb.已交金额=main_sfzb.已交金额+inserted.已交金额,main_sfzb.减免金额=main_sfzb.减免金额+inserted.减免金额
FROM main_sfzb A,(select 收费编号,sum(已交金额) 已交金额,sum(减免金额) 减免金额 from inserted group by 收费编号) B
where A.收费编号=B.收费编号
berwos 2006-08-20
  • 打赏
  • 举报
回复
CREATE TRIGGER [TRIGGER Triginsert] ON dbo.main_sffb
FOR INSERT
AS
select * into #t from inserted

DECLARE test_Cursor CURSOR FOR
select * from #t

OPEN test_Cursor

FETCH NEXT FROM test_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
--更新写这里
FETCH NEXT FROM Employee_Cursor
END

CLOSE test_Cursor
DEALLOCATE test_Cursor
DROP TABLE #T


不知道对不对,高手给指导下
berwos 2006-08-20
  • 打赏
  • 举报
回复
不知道触发器是否支持游标

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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