愚蠢的 SQL Server
今天在SQL Server
的坑里跌得鼻青脸肿,折腾两三个小时,终于爬了出来,特此纪念一下,并以此明志!
背景
-
传统行业的老旧
ERP
项目 -
数据库在公司服务器上,版本为
SQL Server 2000
,本地使用的数据库为SQL Server 2008 R2
,数据库工具为Navicat
-
多数查询是从
视图
里查 -
部分业务是写在
存储过程
里
案发过程
业务功能扩充,需要在数据库中增加几个字段,于是直接从本地SQL Server 2008 R2
连接公司SQL Server 2000
,在表适当的位置插入
所需字段,然后在Navicat
中修改对应的视图和存储过程。
然后,奇怪的事情发生了,程序运行未报错也无错误日志,但就是出不来数据!
打断点,跟踪调试,发现程序抛了个异常,但是没有任何代码能捕获到,而且也并未层层抛出,不知道中间哪个环节被吃了!先不管是哪吃了,把异常处理了应该就没问题了,毕竟之前都是正常的。
异常是类型
不兼容和类型转换错误,好嘛,开始排查存储过程调用……一切正常!
把查询的SQL
输出,在Navicat
中查询,也无结果!把查询条件去掉,结果出来了!排查条件吧,结果发现条件没问题!这TM就有点让人抓狂了!!!
如此这般折磨几遍之后,结果丝毫没有任何改变!法了个克!
还是先喝口水压压惊吧,然后!居然!!竟然!!!发现了不正常的东西!!!!一个布尔型
的字段里居然出现了字符串
!!!!!
再次排查存储过程
,存储过程
正常!
排查视图
,视图
不正常,但视图
的SQL
是正确的!这TM是个什么鬼情况???
百思不得其解!
再喝口水压压惊,把整个修改过程回忆一遍,灵光一闪,发现了点蛛丝马迹:修改视图
时,只是在Navicat
中确认了下视图
的SQL
是否正确,因为是正确的,所以并未进行修改!嗯,问题可能就是出在这里!!!
那就在SQL Server 2008 R2
里看一下吧,然后就发现了真相!我只想说:去你大爷的SBSQL Server
!!!
重新修改视图
,问题解决!
真相
真相就是:
自作聪明的
SQL Server
其实SB愚蠢到令人发指!!!
罢了,还是好好说话吧。
其实问题还是出在插入
字段的这操作上,正常情况下可能是不会出什么问题的,但是当遇到视图
里使用SELECT a.*, b.xx, c.xx ...
这种方式时,问题就来了。
Navicat
中看到的还是SELECT a.*, b.xx, c.xx ...
这种方式,但是在SQL Server
中却变成了SELECT a.f1, a.f2, a.f3, b.xx, c.xx ...
这种方式,本来这也没什么大不了的,但是偏偏在对a
表插入
(并非追加
)字段时就出问题了,因为SQL Server
自己按字段顺序把原有的字段AS
成了新字段,由于插入
了字段,于是后面的字段就都错位
了,结果自然就是驴唇不对马嘴了!
思考
基于这次的发现,估计在SQL Server
中调整字段的顺序也有可能会出现类似的情况,不过没有去测试验证,以后有时间了再说吧(不过估计不会再有时间了吧,就算有时间估计也不会去折腾讨厌的SQL Server
吧)。
另外,服务器的数据库是SQL Server 2000
,修改时用的是SQL Server 2008 R2
,还不好就此说这是哪个版本出现的问题,也许新版本已经解决过了吧,这还是留给有心的朋友去研究吧。
最后,我只想说,MySQL
它不香么?为什么要把时间浪费在SQL Server
上?为什么要把生命浪费在微软
这孙子上?

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
AI 玩王者农药
去年 5 月初,王者荣耀上线了一个挑战 AI 「绝悟」的限时活动,当时打开游戏界面,就能看到 「挑战·绝悟」的入口,活动出来,我就去体验了一下。 这个挑战一共五关,一关比一关难,像我这样的农药大神前几关随便过 ,最后一关就只能推塔了,正面硬刚肯定刚不过。 这种不敢正面怼的感觉「似曾相识」,我在英雄联盟的末日人机中也体会过,拉克丝的天女散花我至今还有阴影。 腾讯的「绝悟」在世界冠军杯半决赛中打败了职业选手,随后又在面向顶级业余玩家开放的体验测试中拿下 99.8% 的胜率。 虽然输了一场,但这个出道没多久的 AI 玩家在电竞圈也算打出了名气,当然这个战绩和王校长比还差点,校长在 100% 胜率时宣布退役,是 LOL 电竞圈唯一一位主动放弃 S 赛名额的选手。 话说回来,训练出像「绝悟」这样吊的 AI,需要腾讯掌握的海量数据和强大的财力,平民也只能体会挨打的快乐,普通玩家要想训练出一个这样的人工智能不太现实。 不过,今天,我给大家带来一个「平民版」的王者农药 AI。这个项目已经在 GitHub 开源,作者是 FengQuanLi,我把预训练文件下载方式和开源地址放在了后台,关注微信公众号「逛...
- 下一篇
缓存设计的话,服务基本不会倒
本文由『Go开源说』第三期 go-zero 直播内容修改整理而成,视频内容较长,拆分成上下篇,本文内容有所删减和重构。 大家好,很高兴来到“GO开源说” 跟大家分享开源项目背后的一些故事、设计思想以及使用方法,今天分享的项目是 go-zero,一个集成了各种工程实践的 web 和 rpc 框架。我是Kevin,go-zero 作者,我的 github id 是 kevwan。 go-zero 概览 go-zero 虽然是20年8月7号才开源,但是已经经过线上大规模检验了,也是我近20年工程经验的积累,开源后得到社区的积极反馈,在5个多月的时间里,获得了6k stars。多次登顶github Go语言日榜、周榜、月榜榜首,并获得了gitee最有价值项目(GVP),开源中国年度最佳人气项目。同时微信社区极为活跃,3000+人的社区群,go-zero爱好者们一起交流go-zero使用心得和讨论使用过程中的问题。 go-zero 如何自动管理缓存? 缓存设计原理 我们对缓存是只删除,不做更新,一旦DB里数据出现修改,我们就会直接删除对应的缓存,而不是去更新。 我们看看删除缓存的顺序怎样才是正确...
相关文章
文章评论
共有0条评论来说两句吧...