注册 登录
编程论坛 SQL Server论坛

请aei135老师进,一个触发器的问题。

arook 发布于 2010-11-25 10:22, 476 次点击
请问如何在保存单据之前执行触发器?
create     trigger wcmo
on [dbo].[ICStockBill]  
for insert,update                       
as
Declare @Ftrantype  int   --单据类别定义
Select  @Ftrantype=Ftrantype  from inserted   
if (@Ftrantype=28)      
begin      
update t2 set t2.fentryselfb0847=t4.fbillno  --(需要点软件的“保存“按钮才会执行更新?能否做到只要t2表有一有数据插入就更新?)   
from inserted as t1                 
inner join icstockbillentry as t2 on t2.finterid=t1.finterid                     
inner join icmo   as t3 on t3.finterid=t2.fsourceinterid                     
inner join seorder as t4 on t4.finterid=t3.forderinterid        
return
end  
7 回复
#2
qingshuiliu2010-11-25 12:55
触发器本身就是只要有数据插入的话
就会更新的啊。
如果不能更新的话,是不是跟if (@Ftrantype=28) 有关系

#3
aei1352010-11-25 13:59
t2表一有数据插入就更新?icstockbillentry 表是t2表,那ICStockBill是什么表了,没看明白
update t2 set t2.fentryselfb0847=t4.fbillno  --(需要点软件的“保存“按钮才会执行更新?能否做到只要t2表有一有数据插入就更新?)   
from inserted as t1                 
inner join icstockbillentry as t2 on t2.finterid=t1.finterid                     
inner join icmo   as t3 on t3.finterid=t2.fsourceinterid                     
inner join seorder as t4 on t4.finterid=t3.forderinterid        
这句也有问题,t2只是表icstockbillentry的别名,怎么能用update t2 set t2.fentryselfb0847=t4.fbillno呢,应该是update icstockbillentry set fentryselfb0847=t4.fbillno才对
#4
arook2010-11-25 14:08
回复 3楼 aei135
aei135老师,
    我重新整理了一下这个触发器,请看。情况也是和之前说的一样。需要点软件的保存“t2.fentryselfb0847”才会更新,而且不会更新在软件的界面,只更新在数据库表的字段。

create  trigger  wcmo
on [dbo].[icstockbillentry]
before  insert,update
as set nocount on
 
UPDATE  t2 set t2.fentryselfb0847=t4.fbillno
       from  icstockbillentry as t2      
        inner join inserted as t1 on t2.finterid=t1.finterid   
        inner join icmo     as t3 on t3.finterid=t2.fsourceinterid                     
        inner join seorder as t4 on t4.finterid=t3.forderinterid

#5
aei1352010-11-25 15:30
上面所说的UPDATE语句还是不对啊,你这样写UPDATE语句肯定是错误的,而且触发器有before insert,update的说法吗?好象没有吧?
#6
arook2010-11-25 15:54
回复 5楼 aei135
不好意思,是for insert,update

请问update应该怎么写?
#7
aei1352010-11-25 16:27
这样
UPDATE  icstockbillentry set fentryselfb0847=t4.fbillno
       from  icstockbillentry as t2      
        inner join inserted as t1 on t2.finterid=t1.finterid   
        inner join icmo     as t3 on t3.finterid=t2.fsourceinterid                     
        inner join seorder as t4 on t4.finterid=t3.forderinterid

#8
arook2010-11-25 17:35
回复 7楼 aei135
aei135老师,
        OK,搞定!
1