日期:2014-05-17  浏览次数:20414 次

是否会出现相同语句,不同的结果
本帖最后由 nemopang 于 2012-12-31 03:37:45 编辑
语句太复杂,我就不贴代码了。

我的情况是这样子

A:
用的是MSSQL 2005 开发版,打开SQL Server Management Studio,用“新建查询”写的语句,中间有用存储过程包起来,设好编号,然后同时打开3个SQL Server Management Studio,每个再打开5个写好的“新建查询”的包含存储过程的语句,15个同时执行(一个一个点执行,中间间隔几秒),相当于多线程处理。

B:
平时的操作流程是先通过外部程序把数据录入DB(DB上建了聚集和非聚集索引),然后像上面A说的,同时执行15个的查询语句。

--------------------

今天改写了一下A的存储过程语句,将原来的A分析出来的数据总数记录下来,大概有3万8千多个。然后我把A分析出的数据删了,用新的存储过程按照A的方式执行。

正常情况应该还是和原来的总数一样,3万8千多个。但新语句只查到3万5千多个。
我把新存储过程换回原来旧存储过程,把新存储过程分析的数据删了,重新执行旧存储过程,得到也是3万5千多个。
也就是说,我第一次执行旧存储过程得到3万8千个,删了,执行新的得到3万5千个,删了,执行旧的得到和新的数据一致3万5千个。

---------------------

我就糊涂了,查了好久都没查出什么问题。我有几个疑问想请教各位大侠:
1. 为了计算快点,这样打开3个SQL Server Management Studio,同时执行15个查询语句(相当于同时执行15个存储过程),是否会影响最终结果?(存储过程:从表1获取数据,分析,录入表2。中间会用到临时表)
2. 是否会因为缓存或索引的关系,导致第一次从表1取的数据和第二次取的不一致,所以分析后的结果就不同?怎么解决?



------解决方案--------------------
不知道你15个存储过程中是否有影响查询表的数据的操作,如果有就不好说了
第一个查询处理到第15个查询出来的数量应该会有变化
如果没有影响查询表数据的操作,那查询几次结果都是一样的
这跟缓存与索引应该没什么关系,关键是你分析是怎么处理的
导致你数据量的变化,可能是你在操作时相关数据表数据发生变动
也可能是你分析时的算法导致
------解决方案--------------------
应该都不会影响,结果不同可能是:
1、你的语句修改了
2、你的数据变化了

------解决方案--------------------
1.你的语句是不是没有加SQL锁
2.程序执行块,没有go