奇怪!SQLServer2000中同样的查询,返回结果不一致!

intersun 2010-01-14 05:27:11
大家是否遇见过这个问题,SQLServer2000执行同一存储过程,在数据库数据相同的前提下,多次执行,返回结果偶尔会有不一致的情况。
我们的存储过程有450行,涉及到多个表的关联查询,返回结果在50万条左右。
...全文
344 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
intersun 2010-01-18
  • 打赏
  • 举报
回复
继续顶,盼高手!
andysun88 2010-01-15
  • 打赏
  • 举报
回复
学习!
intersun 2010-01-15
  • 打赏
  • 举报
回复
感谢大家回复。
首先说数据肯定没有变化,我试验时是把生产数据库copy了一份作为Test环境,在那里做的实验。而且发现的现象是比如连续调用该存储过程30次,可能在中间某次出现返回结果不全,而其他的29次返回的都是一样的,如果是数据变化了,那应该是从中间某次开始,后面那些次的结果都变化了;而且存储过程的参数肯定也没有变化;
其次我的存储过程里面没有类似SELECT TOP 5 * FROM......的语句,也同样没有使用GETDATE函数;
而且我在这里贴出存储过程的代码没有太大意义,首先要执行它还要有那些相关的表,为了保证这个现象能够重现,还要有足够量的数据,而且我的存储过程肯定是没有语法错误的。
这个问题在网上搜索,发现SQL2000的确有这个现象,微软也为此发过一些补丁,我目前打到的补丁是8.0.2040,比SP4稍高一点,而且我们在发现这个问题之后,也把该存储过程重写了一下,之后的确没再发现这个问题,但是这个问题的出现是随机的,没发现不等于完全避免了;而且我们的系统和财务相关,用户要求统计出来的数据务必准确,有这种错误是不允许的。我目前能想到的最好办法,也就是把同样的存储过程执行两遍,然后比较他们的结果,如果两者相同,则说明返回的结果是正确的,然后show给用户,但是这样做对系统资源的消耗就会加倍,所以我在这里想问问大家有没有见过这个问题,以及有无更好的解决办法,哪怕微软有专门的补丁是针对这个问题的,我们也可以安装该补丁。
ks_reny 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guguda2008 的回复:]
如果中间有GETDATE之类的会不一样,再就是有实时修改数据的时候
[/Quote]
有可能是數據實時在變化。
intersun 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 playwarcraft 的回复:]
它本身并没有写操作,
如果其他查询有写操作, 
会对本查询的读操作有影响么?--> 如果相应的表有被锁住,那么就会有影响
[/Quote]
如果有相关的表被锁住,那么难道SQL就会放弃读取该表的数据,而直接返回不完全的结果?而不是等待该表解锁再继续读取?
playwarcraft 2010-01-15
  • 打赏
  • 举报
回复
如果纯select的话,可以在from的表上加上nolock

select * from T (nolock)
playwarcraft 2010-01-15
  • 打赏
  • 举报
回复
它本身并没有写操作,
如果其他查询有写操作,
会对本查询的读操作有影响么? --> 如果相应的表有被锁住,那么就会有影响
intersun 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 code56709951 的回复:]
锁的关系?
[/Quote]

code56709951兄,你说的这个原因我倒是考虑过,可是我这个存储过程是只读的,它本身并没有写操作,如果其他查询有写操作,会对本查询的读操作有影响么?
你能否说的再详细些?
yananguo_1985 2010-01-14
  • 打赏
  • 举报
回复
应该不会吧。
是不是你的存储过程中有参数变化!
ACMAIN_CHM 2010-01-14
  • 打赏
  • 举报
回复
你的存储过程代码是什么?否则别人怎么猜啊?

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
NginxL 2010-01-14
  • 打赏
  • 举报
回复
锁的关系?
  • 打赏
  • 举报
回复
一般不会,检查下你的存储过程
--小F-- 2010-01-14
  • 打赏
  • 举报
回复
有触发器导致数据被修改了
黄_瓜 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 intersun 的回复:]
大家是否遇见过这个问题,SQLServer2000执行同一存储过程,在数据库数据相同的前提下,多次执行,返回结果偶尔会有不一致的情况。
我们的存储过程有450行,涉及到多个表的关联查询,返回结果在50万条左右。
[/Quote]
这么复杂的存储过程,那出点猫腻一时半会是很难找出来的。
nianran520 2010-01-14
  • 打赏
  • 举报
回复
正常 这样的存储过程太耗性能了
guguda2008 2010-01-14
  • 打赏
  • 举报
回复
如果中间有GETDATE之类的会不一样,再就是有实时修改数据的时候
SQL77 2010-01-14
  • 打赏
  • 举报
回复
汗,能不同?
SELECT TOP 5 * FROM TB ORDER BY NEWID()


如果有这样就会不同
andysun88 2010-01-14
  • 打赏
  • 举报
回复
mark
黄_瓜 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 intersun 的回复:]
大家是否遇见过这个问题,SQLServer2000执行同一存储过程,在数据库数据相同的前提下,多次执行,返回结果偶尔会有不一致的情况。
我们的存储过程有450行,涉及到多个表的关联查询,返回结果在50万条左右。
[/Quote]
只能说明是你存储过程的问题吧

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧