程序出Bug,一定是环境的锅!

现象

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

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

定位

查看代码,出问题的功能使用了第三方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“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIX逻辑卷管理(LVM)

VG PV PP LV LP关系图 转载于:https://www.cnblogs.com/limt/archive/2013/04/06/4199257.html

鸿蒙操作系统如何打通 Windows 操作系统?

华为:我们选择拥抱 Windows华为给出的解决方案是在微软 Windows 操作系统中部署 HarmonyOS 分布式插件。运行 Windows 操作系统的电脑和运行鸿蒙操作系统的华为手机将形成超级终端,文件资源管理器实现互通。在 Windows 文件资源管理器中,将显…

凯立德导航android历史版本,凯立德导航升级2020版

凯立德导航升级2020版是一款非常专业的手机机车导航软件,它可以为大家提供便捷的导航服务,用户只需要输入自己想去的地方,软件会智能推荐一条最便捷的路线,同时会告知用户目的地附近热门的吃喝玩乐场所,有需要的用户来…

用 Python 实现打飞机

全世界只有3.14 % 的人关注了数据与算法之美所用技术和软件python 2.7pygame 1.9.3pyCharm准备工作安装好 pygame 在第一次使用 pygame 的时候,pyCharm 会自动 install pygame。下载好使用的素材。技术实现初始化 pygame首先要初始化 pygame ,之后设定一…

把HttpClient换成IHttpClientFactory之后,放心多了

前言关于HttpClient的使用,个人在很多场景都派上用场了,比如在Winform或后台服务中用其调用接口获取和上传数据、微服务中用其进行各服务之间的数据共享等,到目前来看,似乎还没有出现过什么问题,但当我看到官方文档介绍…

android app银联支付,android app 快速接入银联支付流程(android studio版)

刚接触了下银联支付,在网上搜还是看官方文档银联支付都不是很清晰,所以自己总结一篇,希望可以帮助大家快速集成。一.进入下载官网,选择下载手机控件支付demo:https://open.unionpay.com/ajweb/help/file/techFile?pro…

基础排序算法 – 冒泡排序Bubble sort

原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束。 从小到大排序: 原始待排序数组| 6 | 2 | …

这么简单的bug,你改了2天?

大家好,我是Z哥。“这个 bug 的问题不是很明显吗?怎么这么久才搞定?”“就改一行代码,你怎么弄了这么久?”我想上面的言语几乎每个程序员都听到过。特别是面对那些“稍懂技术”的同事的时候。我觉得这篇文章特别适合你…

android最好的3d游戏机,终极盘点:Android必玩十大超猛3D游戏

2010年即将过去,今年是Android平台的发展非常迅猛的一年,系统版本从2.1、2.2一路飙升至2.3,各种手机与平板设备也层出不穷。与此相对的当然就是应用软件的大爆发,根据AndroLib在本周二所公布的数字,Android Market目前…

要学习数据科学知识,这些信息需要知道(数据)

数据科学知识,分享数据干货,追逐科技前沿等方面另外,其他领域的学术进展,资讯以及合适的招聘要获取这些相关的信息,我们觉得这些平台非常的出色,推荐给大家。iNatureID:Plant_ihuman▲ 长按二维…

Csharp实例:武汉智能安检闸机数据接收和解析

项目介绍:本实例主要是接收安检闸机的数据解析并显示到界面上,只做功能实现,不做界面美化硬件:闸机一个、网线一根、电脑主机开发环境:vs2017 系统:win10涵盖知识点:tcp通讯、文件写入、多线程&…

墨迹天气android,墨迹天气Android产品分析

墨迹天气官网宣传图一、产品概况1、产品简介墨迹天气是一款免费天气预报工具,提供日出日落信息,六小时天气预报2、主要竞品天气通、最美天气、91黄历天气、知趣天气、懒人天气、琥珀天气二、体验环境手机:华为A199操作系统:Androi…

可编程的智能小车,100种玩法,让孩子玩出理科编程思维

▲数据汪特别推荐点击上图进入玩酷屋毫无疑问,数学、科学和计算机科学是解决21世纪现代问题的三大支柱。当现在各式各样的兴趣班和教育辅导班快要呈现饱和状态时,一种新兴的教育活动正如火如荼地进行着那就是少儿编程。少儿编程奇迹般的红火,…

我的Android进阶之旅------Android MediaPlayer播放mp3的实例--简易mp3播放器

大家好我们今天研究的是Android中很重要也最为复杂的媒体播放器---MediaPlayer. Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。 首先来看看MediaPlayer的生命周期&#xff…

AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念。但是很多同学在使用过后都提出了需要多用户支持的建议。整个团队或者整个公司都使用同一个密码来管理非常的不方便。今天 AgileConfig 1.3.0 版本终于支持了多用…

每日一笑 | 马冬梅当上了百度投资董事???

全世界只有3.14 % 的人关注了数据与算法之美马东什么?(图片来源于网络,侵权删)

批处理解决局域网共享打印机问题

随着公司规模的扩大,人员流动性也越来越大。特别是业务这块,隔三差五的就来几个业务人员,一入职各种后勤工作都要给他们安排好。网络这块除了基本的网线,电话要通以外。最最后面的当然就是打印机的共享了。 先说说公司的网络环境。…

.NET MAUI 预览版 6 发布

原文:bit.ly/2SKad9g作者:.NET Blog - David译者:精致码农 - 王亮当我们还在从微软 Build 大会和 .NET 6 预览版 4 中缓过来的时候,我们在这里就开始分享我们在 .NET 6 预览版 5 中对 .NET 多平台应用程序开发框架(.NET MAUI)的持…

德国布线牛到不行?今天带你看看咱们中国的!

全世界只有3.14 % 的人关注了数据与算法之美相信不少人都有看过德国的布线,那整齐的感觉让人舒服。这是由BuzzFeed网站刊登的照片,从图片可以看出,德国工程师严谨的态度却是表现的淋漓尽致,让人大饱眼福,简直就是洁癖症…

Java进阶02 异常处理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 程序很难做到完美,不免有各种各样的异常。比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足。…