今天修改程序事碰到rows changed between retrieve and update的报错。但是语句单独拿出来在mssql里面执行是不报错的。因为处理此类问题的经验不足,就换了一个库尝试一下。换库之后不会报错。就对比了两个库的不同。发现切换前的库比切换后的库多了几个触发器,各个排除之后。发现某一个触发器启用之后就会报错。
我修改表a的数据,触发触发器后,会update表b的数据,一眼看下来,看不出啥问题。搜索数据发现,我修改表a的数据时,关联到表b是关联不到数据的。等于没有update任何数据。
然后我试着把update条件写成一个有数据的固定值。果然就不会报错了。之后我就在update语句前面加了个exists条件。问题就解决了。
总结下来,pb修改数据触发触发器的时候,如果触发器中有update语句且没有update任何数据时,就会报rows changed between retrieve and update的错误。