日期:2014-05-17  浏览次数:20512 次

触发器中语句改判断方式
引用
http://bbs.csdn.net/topics/390657550
引用yupeigu回我的方法

create trigger dbo.trigger_purtb_insert
on purtb
for insert
as
  
update purtb
set 备注 = isnull((select t1.订单单别+'-'+t1.订单单号
                   from mocta t1 
                   where (i.参考单别 = t1.工单单别 and i.参考单号 = t1.工单单号) 
                   or (i.参考单别 = t1.订单单别 and i.参考单号 = t1.订单单号)
                  ),
                  i.参考单别 +i.参考单号
                 )
from inserted i
where purtb.请购单号 = i.请购单号 and
      purtb.参考单号 = i.参考单号
            
  
go


如题,这个触发器条件能否改为判断语句,当满足

--(i.参考单别 = t1.工单单别 and i.参考单号 = t1.工单单号) 
--or 
--(i.参考单别 = t1.订单单别 and i.参考单号 = t1.订单单号)

时,执行  备注 =参考单别+参考单号
不满足条件时,退出语句,可以让单据新增或修改,因为现在这个触发器执行后,发现我要新增加单据或增加一条记录时,就会出问题

我分析觉得是这个触发器的语句是肯定的方式,才存在这个问题,不知道是不是这样?


------解决方案--------------------
引用:
Quote: 引用:

这个我估计是因为内部的子查询,返回了多余1条记录,导致的,就算是先判断,估计后面更新时,也还会报错。

所以比如改为这样试试:


create trigger dbo.trigger_purtb_insert
on purtb
for insert
as
  
update purtb
set 备注 = isnull((select top 1 t1.订单单别+'-'+t1.订单单号
                   from mocta t1 
                   where (i.参考单别 = t1.工单单别 and i.参考单号 = t1.工单单号) 
                   or (i.参