sql – ORDER BY和ROW_NUMBER()是否确定?

前端之家收集整理的这篇文章主要介绍了sql – ORDER BY和ROW_NUMBER()是否确定?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在几个数据库引擎中不时使用sql几年但是理论知识很少,所以我的问题可能对你们中的某些人来说非常“愚蠢”.但它现在变得很重要,所以我不得不问.

想象一下具有非唯一列状态的表Url.对于这个问题,假设我们有大量的行,并且状态在每条记录中都具有相同的值.

并想象我们执行多次查询

SELECT * FROM Urls ORDER BY status

>我们每次都获得相同的行顺序吗?如果我们做了如果添加一些新行会发生什么?它是否会更改订单,或者新记录会附加到结果的末尾?如果我们没有获得相同的订单 – 在什么条件下依赖于此订单?
> ROW_NUMBER()OVER(ORDER BY状态)将返回与上面查询相同的顺序,还是基于不同的排序机制?

解决方法

这很简单.如果您想要一个可以依赖的排序,那么您需要在ORDER BY子句中包含足够的列,以便所有这些列的组合对于每一行都是唯一的.没有其他保证.

对于单个表,通常可以通过列出“有趣”的列进行排序,然后包括主键列来获得所需的内容.由于PK本身保证了唯一性,因此整个组合也保证唯一地定义排序,例如,如果Urls表的主键为{Site,Page,Ordinal},那么以下内容将为您提供可靠的结果:

SELECT * FROM Urls ORDER BY status,Site,Ordinal
原文链接:https://www.f2er.com/mssql/77852.html

猜你在找的MsSQL相关文章