语句A:update tableA set a='1', status='2' where 条件
语句B:insert into tableB( field1, field2 ) values('1','2')
两个问题可能需要考虑一下
1,A和B语句之间有GO或者分号吗?如果没有,那么你是通过什么方式执行这两条语句的。比如假设C#中的SqlCommand类会把A和B拆分为两条语句来单独执行,相互不影响结果(未经实测!!!)。
2,status在某些数据库中是关键字,这可能造成该语句不执行,试试用[status]代替。
没有分号,是某些特定情况下如此,低几率。,所以你说的两种情况都不是。
不太可能出现你说的情况,一个语句是一个事务。不可能更新一般
绝对不可能
肯定是有其它操作,让status又恢复为原始值,如:触发器或程序的其它逻辑等等,不然就是数据库坏了
自然,我也觉得是不可能,可是以我有限的知识,不敢包票说百分百不可能哦。
跟踪了sql语句,没发现有其他地方update这个值,这个数据库有跨库操作,是计划任务,不知道有没其他地方有操作,我也怀疑是不是其他地方作了修改。但不能作实际跟踪,生产环境呢,几百万数据在跑。
所以,求救大家,看有否可能会出现这种情况。
补充说明: 我是在测试环境跟踪的,都不会出现这种情况,但在生产环境却偶有这种情况发生,生产环境作不了跟踪。
@arthur613:那就查看 SQL LOG
或者在该表加一个触发器,如果有更新,则 触发器 可以在临时表中操作插入的操作等等
规范sql才是重点