首页 新闻 会员 周边

SqlServer读取数据时发生的诡异问题

0
悬赏园豆:200 [已解决问题] 解决于 2015-03-17 11:02

非常奇怪的一个问题,我的一个数据表中用一个字段记录程序业务处理的时间,Job会定期处理然后更新这个字段的值到最新的时间,某些情况下,会发现更新的值完全不是我预期的(查询出来是非常早期的值)。

当我在查询分析器中查询,使用唯一条件(ID)查询时,读取出来的日期字段是'2014-06-10'(错误的值)。

使用更加宽松的查询条件时,结果集中显示的值是'2015-03-02'(正确的值)。

反复按照ID查询,发现过了一会儿,大概1分钟后,这个错误的值'2014-06-10'又变为正确的值'2015-03-02',事实上在执行更新之前,这个字段的值是'2015-03-01',无论如何也不应该是'2014-06-10'才对。

我可以确认的是,一定不是其它程序对这个字段做了修改,当时只有这一个程序在修改这个字段,也不能稳定重现这个问题,但却是发生了好多次。

 

所以我的问题是,这样的问题会在有哪些可能的情况下发生,如何处理?

rex xiang的主页 rex xiang | 初学一级 | 园豆:37
提问于:2015-03-02 19:47
< >
分享
最佳答案
0

1、你应该可以用SQL PROFILER捕捉到所有的更新语句的。

2、有可能是JOB里面的代码错了。

3、有可能是你记错了,就是有别的程序在干这事。

4、排除干扰的方法使用一下。比如断开服务器,不让其他客户端连接进来。

收获园豆:200
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-03-02 20:36

经过长期观察,确实是自己的bug,在某些特殊情况下,Job会使用外部API返回的时间作为修改时间,特定的情况下,API返回的时间存在问题,就变成了'2014-06-10'。

rex xiang | 园豆:37 (初学一级) | 2015-03-17 11:04
其他回答(4)
0

是不是你用了事物,执行的好好的最后又回滚了

刘宏玺 | 园豆:14020 (专家六级) | 2015-03-02 23:25
0

既然“2014-06-10”多次出现,你就直接搜索这个值试下,是不是代码哪里把时间写死了

大志若愚 | 园豆:2138 (老鸟四级) | 2015-03-03 10:23
0

看看有没有触发器什么的

Yu | 园豆:12980 (专家六级) | 2015-03-03 15:22
0

Job会定期处理 定期处理时间是1分钟吗?

丫的 | 园豆:1575 (小虾三级) | 2015-03-03 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册