首页 新闻 会员 周边

为什么:SQLServer 查询结果集,每次的顺序都不同?

0
[已解决问题] 解决于 2018-03-29 08:43
1 SELECT 日期 FROM  s_tech.每日刷卡 
2                     WHERE  員工卡號='129297' AND 日期>='2014/08/01'

如上代码查询的结果是:

,每次查询结果的顺序都是不相同,是要在哪里设置吗?数据表是从SQL主机上提取到本机数据库里面的,在主机上查询的记过顺序是固定的。

我在本机用Cursor查询未按日期正常排序的结果是固定的2014--08-01、~9,~5,~7,~6,~11,~8,~2号,在主机上执行只提示是查询执行成功而看不到Cursor结果。哪里设置问题吗?

Cornelius的主页 Cornelius | 初学一级 | 园豆:80
提问于:2014-08-16 09:23
< >
分享
最佳答案
1

以前书上看过,不过不太确定,帮你Google了一段文字。以下是文字:

1、哈哈,你对现代数据库软件的管理方式的理解还不够。
2、现代的数据库软件存取数据时,在物理上是不会按某种默认的顺序的,即便内部按顺序,它取出数据展示给你时,也不会用某种固定的顺序,因为,它的做派是,先取到哪个合要求的数据就取哪个。也许,今天是这几个在前面,明天可能就是那几个在前面了。对此,你不能纠结,也不必纠结。
3、那怎么办?就让它无序的展示给我们吗?那谁受得了?!哈哈,你如果对顺序有要求,你应该“说”出来,你不说,人家怎么知道呢。现在的数据库你要按某顺序取数据,请你加上“ORDER”指令,比如:
SELECT A.* FROM TABLE_1 A ORDER BY A.ID
(注意上面的指令中,TABLE_1 表中应该有ID字段)
4、如果你的表中经常会用到某种顺序取出展现,在建立表时针对性加上索引会使表的查询速度得到一定的提高。

奖励园豆:5
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-08-16 09:55

我在主机上执行上面那条SQL结果集顺序一直是固定的,在本机上就不是。

我是不想用ORDER BY 来排序,就是为了看那些记录没按日期正常排序

Cornelius | 园豆:80 (初学一级) | 2014-08-16 11:24

@Cornelius: 对于数据库引擎来说,他是没有办法知道先和后这个差别的。

你所谓的先后,可能是根据记录插入的时间。如果是这样的话,通常我是有一个专用字段来保存创建时间的,

以前还有人根据自增ID来排序,但长大以后发现那也是Too young too simple。因为自增ID达到最大值以后,数据库引擎是会取出以前没有用过的值来当ID的,所以这个也不保险。

总之,不要想当然,电脑不是人,就算是人,其实默认也是有个字段的,就是所谓的先后,

这个先后,数据库引擎如何知道,要么就要有一个隐藏的字段(你看不到)来表示,

而现代的数据库引擎认为数据是无序的,你需要顺序是吗?请设计一个字段来保存,谢谢!

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-16 11:30
其他回答(5)
0

默认是根据聚集索引排序的

dudu | 园豆:31007 (高人七级) | 2014-08-16 11:56

这个对楼主感觉没有什么帮助的说。推荐楼主看下这篇文章吧,

SQL Server的聚集索引和非聚集索引

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-16 12:12
0

order by 一下就可以了。

囧月言炎 | 园豆:260 (菜鸟二级) | 2014-08-16 15:56
0

看你以为什么排序吧. 自己要一定的顺序就order by 一下

望着天的蜗牛 | 园豆:354 (菜鸟二级) | 2014-08-16 19:19
0

你的主键是什么?

 

从你的表象看,是主键使用了GUID,同时GUID是非有序的生成。

 

具体的,就看你的实际的主排序键了,很难说清楚,需要你把表结构贴出来。

519740105 | 园豆:5810 (大侠五级) | 2014-08-18 09:44
0

本身就是没有顺序的,即便是你的表里有顺序,它也不会按照顺序取    如果你加上order by 后他就会给你邮顺序了。他会帮你写入相应的数据库缓存里面

我是糖糖 | 园豆:446 (菜鸟二级) | 2014-10-17 12:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册