现象

前几天,一个客户反映说,他看到的数据顺序是乱的,不是按照日期倒排。

但是在测试环境、预生产环境,都无法重现问题,即使使用相同的程序版本。

定位

查看代码,出问题的功能使用了第三方ORM框架,无法看到实际执行的SQL。

于是,使用SQL Server Profiler(正式服务器没有权限安装软件,只能在测试环境使用)跟踪定位到具体的SQL,拿到正式服务器上运行。问题重现了。

由于数据需要分页显示,于是ORM框架实际使用了ROW_NUMBER实现:

SELECT TOP (20) T.ROW_NUMBER_0,T.xxx FROM (SELECT xxx,ROW_NUMBER() OVER(ORDER BY DateField DESC) AS [ROW_NUMBER_0]
FROM A  WHERE xxx) AS [T] WHERE [T].[ROW_NUMBER_0] > 0

而造成问题的原因就在于,返回的结果不是按ROW_NUMBER_0排序的。

分析

查看微软官方文档,没有说明要指定排序:

对结果集的输出进行编号。具体来说,返回结果集分区内行的序列号,每个分区的第一行从 1 开始。

看它的意思,返回的编号应该是排序好的。

而且,它自己给的示例也是不指定排序的

这就造成ORM框架实现时没有考虑要指定排序。

结论

解决方案也很简单:指定按RowNumber排序。

后来检查发现,前方是Microsoft SQL Server 2012 (SP1),而测试环境用的是Microsoft SQL Server 2014。同样的SQL,运行效果不一样。GOOGLE了一下,也没发现有相关Bug的内容。

顺便测试了一下EF CORE,它是用OFFSET @P_0 ROWS FETCH NEXT @P_1 ROWS ONLY方式实现的分页,应该不会再有这个问题了。

最后,提醒大家赶快把测试和生产环境配置统一,避免踩和我同样的坑!

欢迎关注我的个人公众号”My IO“

程序出Bug,一定是环境的锅!相关推荐

  1. 当程序出Bug时,程序员最喜欢说的30句话

    又快到周日时间,今天来个轻松娱乐的话题,当程序出Bug时程序员最喜欢说的30句话 1.在我的电脑上是正常的啊... (环境问题,不关我的事) 2.不可能出现这种情况的 (操作方式有问题) 3.快了,已 ...

  2. 微信翻译出Bug上热搜,程序员又背锅?

    作者| 伍杏玲 来源 | 程序人生(ID:coder_life) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=cxrs_ ...

  3. 微信翻译生日快乐的代码_微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  4. 微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  5. 背锅侠?程序出现bug是测试/开发工程师水平有限导致的?我只是个搬砖的......

    目录:导读 前言 一.Pytest自动化框架 二.Web自动化测试 三.Appium自动化 四.Robotframework 五.接口自动化测试 六.JMeter接口测试 七.Postman接口测试 ...

  6. 运行个Hello Word也能出Bug?Python、Java、C++等16种语言中枪,最严重可导致文件丢失...

    博雯 发自 凹非寺 量子位 | 公众号 QbitAI 一句最简单的Hello World,居然也会出Bug? 倒不是这句代码还能写错,而是运行时找到了许多操作系统对异常处理的漏洞. 在向/dev/fu ...

  7. 微信小程序 一 小程序的创建、宿主环境、常用组件、开发上线等

    小程序简介 1. 小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API 不同 由于运行环境的不同,所以小程序中, 无法调用 DOM 和 BOM 的 API. ...

  8. 线上出bug了?别怕,这么定位!

    小编推荐: Fundebug提供JS.微信小程序.微信小游戏,Node.js和Java错误监控.真的是一个很好用的错误监控服务,众多大佬公司都在使用. 摘要: Source Map还是很神奇的. 原文 ...

  9. 从入门到入土:nmap出击:使用nmap扫描某台靶机,给出并解读靶机环境的配置情况

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. SpringBoot整合Shiro安全框架完整实现
  2. 鸡啄米vc++2010系列32(标签控件Tab Control 下)
  3. 精细化容量管理的设备成本优化之路
  4. 飞鸽传书完全不知道这是什么
  5. Lake Counting(信息学奥赛一本通-T1249)
  6. 非常简洁漂亮的博客导航页带自适应
  7. Nexus启动失败处理:The nexus service was launched, but failed to start.
  8. Django自定义分页、bottle、Flask
  9. 数学建模学习笔记:层次分析法
  10. 【资源分享】Dll Injector(DLL注入器)
  11. Intellij IDEA--配色方案/主题/风格/样式--自定义/配置
  12. 基于SSM+VUE的交通事故案例库系统(前后端分离)
  13. 计算机毕业设计springcloud基于微服务的家居体验平台的设计与实现
  14. 需求调研中要注意的三点
  15. java粒子特效_程序员20分钟搞定粒子效果, 仅仅200行代码
  16. MongoDB的多表关联查询
  17. 六月集训(第21天) —— 堆(优先队列)
  18. 数通基础-二层交换原理
  19. Android中LaunchMode详解
  20. 使用JavaScript实现GPA计算器(学科实践任务 一)

热门文章

  1. 安卓相机 高帧率_Android MediaCodec和摄像头:如何实现更高的帧速率从相机获取帧原始数据?...
  2. delphi 软件在线人数统计_8款值得学习的科研论文作图软件
  3. # 2019-2020.3 《java程序设计》第一周学习总结
  4. Codeforces936C. Lock Puzzle
  5. 异常处理、socke基于TCP协议编程
  6. Java捕获并处理线程失败抛出的异常
  7. JavaScript中的的面向对象中的一些知识
  8. hdu 3480 斜率dp
  9. HTFS.Software.v7.3-ISO 1DVD(传热模拟,最新完全解密版)
  10. CVE(Common Vulnerabilities and Exposures通用漏洞披露)笔记