关于SQL事务的一些坑
尽量不要在存储过程里自己使用事务 begin tran
要在执行端 即EXE端去 捕捉错误。有错误则回滚事务
原因:
比如EXE 用ADO 默认是超时30秒 如果过程超时了,就算过程里面写了begin try 去捕捉也捕捉不到的,不会执行到rollback tran
还有一些其他情况,有时候修改过程你字段不存在的情况是可以执行修改过程成功的,但是到了exe去执行时却是会提示的,一样begin try 捕捉不到。
所以为了防止其他一起没有想到情况,最好是在EXE端去做错误捕捉。非要在过程里面写的话,最好是写成动态语句拼凑去执行。exec(@sql)