MSSQL中吓人一身冷汗的BUG
在MSSQL7.0中用查询分析器选择NorthWind数据库,复制粘贴下面的一条语句执行:
update Orders set CustomerID='HANAR',EmployeeID=4 where OrderID='10250'
看看执行结果,也许你会吓出一身冷汗!!!
因为执行结果是修改了830行记录,这830行记录的CustomerID字段都改成了'HANAR'。
为什么呢?
大家注意上面那条语句中间的逗号,那不是一个简单的逗号,而是一个中文的逗号。
就是这个致命的中文逗号,导致了从逗号以后的语句全被忽略,而且执行并未报错。
(用Delphi等开发工具编制数据库程序,一样会碰到这个问题)
实际执行的语句就变成了
update Orders set CustomerID='HANAR'
所以在使用MSSQL7.0的朋友一定要特别注意了,不然这个BUG导致的错误一定会让你欲哭无泪!
『注:此BUG只在 MSSQL 7.0 版本中存在,MSSQL2000已经修正此问题』
我使用的MSSQL 7.0 未使用任何升级补丁,所以MSSQL 7.0 的升级补丁是否修正了此BUG我并未测试,请大家自己测试。
(帖子错发到了非技术区,再次重发)
问题点数:0、回复次数:28Top
1 楼huangjianyou(小健)回复于 2005-08-03 12:20:29 得分 0
^_^Top
2 楼WuChenCan(雨中男孩)回复于 2005-08-03 12:26:32 得分 0
谢谢,不过偶不遇到过!Top
3 楼MrPotter(HarryPotter)回复于 2005-08-03 12:34:38 得分 0
理论上会报语法错误的,因为那个,无法识别Top
4 楼zjcxc(邹建)回复于 2005-08-03 12:35:14 得分 0
sql 2000中没有此问题.Top
5 楼operfume(橘子香水)回复于 2005-08-03 12:41:58 得分 0
没有遇到过Top
6 楼bedsheet(岸上的鱼)回复于 2005-08-03 12:48:50 得分 0
『注:此BUG只在 MSSQL 7.0 版本中存在,MSSQL2000已经修正此问题』
大家注意:我已经说明了,是MSSQL 7.0 版本中的问题!Top
7 楼bedsheet(岸上的鱼)回复于 2005-08-04 18:48:07 得分 0
不会吧!
大家都没碰到这个问题吗???
给个共鸣啊!Top
8 楼MorningTea(一勺抹茶)回复于 2005-08-04 19:39:12 得分 0
\/^ O ^\/
我的也有,不过是看了之后才去测试,果然!
我这里有2个版本,7.0,8.0,不过8.0的就没有这个问题,会报错哦
一定注意!!!!Top
9 楼wscft(努力工作,开心生活!))回复于 2005-08-04 19:48:03 得分 0
hehe, 俺用的是2000Top
10 楼summerICEREDTEA(从基础学起)回复于 2005-08-04 20:15:32 得分 0
现在主要用的是应该是2K吧Top
11 楼guid6(学无止境)回复于 2005-08-04 20:41:09 得分 0
谢谢楼主提醒Top
12 楼tangqijun199(撒旦.冲上了5角还差一个猩猩,继续努力……)回复于 2005-08-04 20:55:35 得分 0
谢谢提醒.Top
13 楼bedsheet(岸上的鱼)回复于 2005-08-04 21:00:01 得分 0
虽然说现在普遍都用MSSQL2000了,但相信7.0的用户也一定不少!
个人感觉这个错误比较低级,说不过去!
但仔细一想,应该是对中文支持的问题,
可见外国对c h i n a的重视程度!Top
14 楼fongming()回复于 2005-08-05 10:11:40 得分 0
用MSSQL2000不会啊Top
15 楼good_luck898(898)回复于 2005-08-05 10:32:13 得分 0
呵呵,我好像一般不用中文标点!
只有比较特殊的文档才会将它调成中文的.
Top
16 楼glen_huang(心要飞扬)回复于 2005-08-05 12:59:00 得分 0
真的吗,我要回去看看Top
17 楼yxg80(林夕昱)回复于 2005-08-05 13:26:11 得分 0
谢谢了!Top
18 楼hglhyy(為人民币服务!)回复于 2005-08-05 14:30:13 得分 0
以前用过7.0 ,但没用多久就用8.0了! 不过你说的听起来是很危险!幸亏我没有做过这样的傻事!Top
19 楼starbzj(bbb)回复于 2005-08-05 16:51:07 得分 0
sql server就是差,明明该出错了,可是它却要把它屏蔽掉。
还有一些其它的,比如:插入一个字段,本来字段长度不够长,报一个错出来就行了,可以MS就是不,偏要把它截断了再插入,你说这样多危险,出了错都不知道。Top
20 楼bedsheet(岸上的鱼)回复于 2005-08-06 15:35:50 得分 0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sql server就是差,明明该出错了,可是它却要把它屏蔽掉。
还有一些其它的,比如:插入一个字段,本来字段长度不够长,报一个错出来就行了,可以MS就是不,偏要把它截断了再插入,你说这样多危险,出了错都不知道。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
这位老兄说的问题好像有误!
除了数值型字段会出现自动截断问题,其他类型的字段都是会报错的,包括MSSQL7.0
如果说是改变表结构,减少字段位数的话,系统会提示数据有可能丢失。
所以说,这一点不是MSSQL的错!Top
21 楼iwl()回复于 2005-08-07 13:52:09 得分 0
没有遇到过Top
22 楼goodsung(凄风冷雨)回复于 2006-01-16 16:42:33 得分 0
我也测试了,确实有这个问题。
真的是很恐怖又不该有的错误。
不过幸亏SQL7以后的版本没有这个问题!Top
23 楼happyflystone(无枪的狙击手)回复于 2006-01-16 16:45:59 得分 0
呵呵 ,Top
24 楼tangqijun199(撒旦.冲上了5角还差一个猩猩,继续努力……)回复于 2006-03-04 11:08:29 得分 0
早就知道了,我还以为地球人都知道!Top
25 楼softj(天地客人<最近很迷茫>)回复于 2006-03-04 12:23:36 得分 0
所以还是用新的版本和补丁Top
26 楼bedsheet(岸上的鱼)回复于 2006-04-18 12:30:59 得分 0
看上面的回复,地球人还都不知道!呵呵
Top
27 楼xeqtr1982(Visual C# .NET)回复于 2006-04-18 12:39:15 得分 0
还真不知道 :)Top
28 楼tntzbzc(华裔大魔王—抗日要从娃娃抓起)回复于 2006-04-18 12:53:18 得分 0
成年老贴了
UPTop




