为什么表格会随机重组行?

时间:2019-06-04 20:34:06

标签: sql sql-server tsql rdbms

我有下表

table

DBName  Server  Status  UpdateTime
DB1 server1 NULL    5/4/2019
DB1 server1 NULL    NULL
DB2 server2 NULL    6/4/2019
DB2 server2 NULL    6/4/2019
DB3 server2 NULL    NULL
DB3 server2 NULL    NULL

有时,当我单击“选择行”时,它会以某种方式重新排列一些随机行。另外,如果单击“编辑”,我会注意到行已重新排列。为什么会发生这种情况?

rearranged

DBName  Server  Status  UpdateTime
DB1 server1 NULL    5/4/2019
DB2 server2 NULL    6/4/2019
DB3 server2 NULL    NULL
DB3 server2 NULL    NULL
DB2 server2 NULL    6/4/2019
DB1 server1 NULL    NULL

我的意思是,这实际上并不会导致问题,但是我有3个环境,当行的顺序不同时,很难跨环境比较结果。

起初是在我在家远程工作时发生的。所以我认为可能是VPN /网络问题。但是即使在办公室,它也发生了,我没有连接到VPN。

编辑:

这与这个问题不同,因为我没有主键

Does 'Select' always order by primary key?

1 个答案:

答案 0 :(得分:5)

SQL表没有固有的顺序。这是设计使然。如果未指定顺序,则DBMS可以自由选择以合适的顺序返回行。通常,这通常是最初插入行的顺序,因此人们有时会认为这是表的自然顺序或固有顺序。但是实际上没有任何东西可以保证这一点,因此您不能依靠它。正如您所注意到的,DBMS有时可能出于自身原因决定采取不同的处理方式。

如果您要始终如一地查看特定顺序的内容,那么幸运的是,该解决方案简单明了:您必须在ORDER BY查询中使用SELECT子句。

如果您需要以非自然的方式进行排序(例如,以非字母顺序排序varchar列),那么标准的解决方法是添加一个额外的“ sort”列作为代理,然后通过该排序。 >