当前位置: 代码迷 >> Sql Server >> 触发器中话语改判断方式
  详细解决方案

触发器中话语改判断方式

热度:68   发布时间:2016-04-24 19:37:56.0
触发器中语句改判断方式
引用
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.参考单别 = t1.订单单别 and i.参考单号 = t1.订单单号)
                   order by t1.订单单别
                  ),
                  i.参考单别 +i.参考单号
                 )
from inserted i
where purtb.请购单号 = i.请购单号 and
      purtb.参考单号 = i.参考单号
            
  
go

我刚才试了一下,可以解决前面出现的问题,感觉在前台增加数据时,程序变得不稳定的感觉,有时界面像是一晃就过了,还要深入应用一下,看看还有没有别的问题,不过现在我想问一下,为什么简单增加一个排序,就会好


呵呵,其实就是只选择一行数据,因为子查询要返回数据,并且赋值,必须只有1行数据,否则就会报错
  相关解决方案