SQL SERVER (MSSQL) 执行异常的问题
业务背景
每次会提交一堆SQL执行,
第一部分是写入一个明细表,
第二部分是将另外一个表的字段加一
我最开始以为只要数字加一, 就表示第一部分肯定执行成功了, 因为按照一般的想法是,如果第一部分执行出现错误,就不会跑到第二部分来.
经过测试,发现如果是批量提交SQL执行, 某一部分的错误并不会影响其他的SQL执行.
所以一旦第一部分执行错误,就会导致第二部分的计数不准确.
最后的解决办法是在执行第二部SQL之前 先判断有没有错误,如果没有再执行.
if @@error!=0 return
最好的办法应该是用事务回滚.
但是因为我们的表设计如果用事务,会导致行锁, 这样就会影响其他字段的更新.
以后设计表的时候需要考虑到字段行锁的问题. 如果字段都需要高并发的修改,可以通过子表的方式将字段分布到不同的行,解决数据库事务高并发的问题.