社区
疑难问题
帖子详情
奇怪!SQLServer2000中同样的查询,返回结果不一致!
intersun
2010-01-14 05:27:11
大家是否遇见过这个问题,SQLServer2000执行同一存储过程,在数据库数据相同的前提下,多次执行,返回结果偶尔会有不一致的情况。
我们的存储过程有450行,涉及到多个表的关联查询,返回结果在50万条左右。
...全文
344
19
打赏
收藏
奇怪!SQLServer2000中同样的查询,返回结果不一致!
大家是否遇见过这个问题,SQLServer2000执行同一存储过程,在数据库数据相同的前提下,多次执行,返回结果偶尔会有不一致的情况。 我们的存储过程有450行,涉及到多个表的关联查询,返回结果在50万条左右。
复制链接
扫一扫
分享
转发到动态
举报
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
打赏
举报
回复
锁的关系?
让你望见影子的墙
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]
只能说明是你存储过程的问题吧
奇怪
!同一条sql语句在数据库和代码
中
执行结果不同?!当然是人错了 ……
sql语句就是它: select count(1) from syscolumns where [id]=object_id( 'tablecommon' ) 判断数据库
中
是否存在表tablecommon,本想让在数据库
中
查到的值
返回
到程序里,值却总不是想要的: 程序里
返回
-1 sql里
返回
大于0的值(意为存在该表)
同样
的sql,mysql 每次
查询
结果顺序不
一致
写代码
中
的某一天,我写下了如下的代码: public Connection getConn() { String driver = "com.mysql.jdbc.Driver"; String url = "***"; String username = "***"; String password = "***";...
sqlserver
2000
数据库修复实战经验
我所讲的一个故事的背景是这样的,在某一个POS的项目
中
使用
SQLSERVER
2000
做前台数据库,IBM 的DB2做后台数据库。前台数据库的环境是这样的操作系统是WINDOWS
2000
SERVER(10 USERS),数据库是
SQLSERVER
2000
(E)+SP3,Application是POS的收银系统(是一种实时的交易系统)。硬件的配置是:P4 XRON 2.4G*2,36G
SQL Server不存在或访问被拒绝"问题的解决
"SQL Server不存在或访问被拒绝"问题的解决最近做一个项目(Asp.net+Sql Server
2000
),在原来开发的机器上运行没有任何问题.但当我在另外一台机器上调试程序(本机调试)的时候,总出现“SQL Server不存在或访问被拒绝”。相信在任何一个搜索网站输入这样的检索词,一定会获得n多的页面。总结起来的关于SQL Server连接
中
此类四个最常见错误错误解决方案如下:
sql server锁知识及锁应用
sql server锁(lock)知识及锁应用 一 关于锁的基础知识 二 锁的分析及应用系列 三 SQL Server 锁机制 悲观锁 乐观锁 实测解析 四 SQL Server
中
WITH NOLOCK浅析
疑难问题
22,302
社区成员
121,734
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章