触发器更新引发的异常'无法为更新行集定位:一些值可能已在最后读取后改变', 该怎么修改触发器
有两个表, 报价单, 订单表, 报价单有一个bit字段<是否接单>记录本报价单是否接到订单;订单表中有一个字段<对应报价单号>记录本订单对应报价单号.
在删除订单时需要修改对应报价单的是否接单字段.
在订单表中定义如下触发器:
CREATE TRIGGER tg_订单_Del ON [dbo].[订单]
for DELETE
AS
update 报价表
set 是否接单=0
where 报价单号=
(select 对应报价单号
from deleted)
GO
在订单有报价单对应时运行正常.
但当订单没有对应的报价单时(直接下的订单,或对应报价单已经被删除). 将出现'无法为更新行集定位:一些值可能已在最后读取后改变'的异常, 我是使用事务进行更新的.
在问专家上看到的回答是:
由于所修改的记录与数据库所存在的记录冲突,导致更改失败(如其他用户已将记录删除),如果没有触发器,其实程序发生警告信息给Errors集合,但不终止程序运行,也不会出实时错误提示。如果你加上触发器,你所进行批更新包括从Deleted表中记录,即所有删除的记录,所有的更新请求都不存在(或已被其它用户删除),所以出现实时运行错误。
对于我的情况, select 对应报价单号 from deleted 将是NULL值, 但这并不影响Update语句的执行啊??
请高手解疑!