T. *_*Mas 0 sql-server windows c#
我有一个使用 C# 发布的 SQL Server 表。我希望使用 Id 对字段进行排序。相反,我得到了这样的东西:
我需要按照编号递增的顺序排列 id 列,因为我使用 C# 中的数据表一次遍历这些值,因此从 7 到 9 再到 11 再跳到 8 非常不方便。
注意:我不是在谈论 select * from table_name order by id。我需要按照请求的顺序“永久存储”这些值。
现在,当你说:
我需要将id列按数字递增的顺序排列,因为我使用C#中的数据表一次遍历这些值,因此从7到9再到11再跳到8非常不方便。
它显示了一些混乱。这里有两个相互正交的问题:
行存储的内部顺序
行在结果集中返回的顺序
这两者不要混淆。内部顺序是数据库物理设计的问题,而结果集的顺序可能因查询而异,具体取决于ORDER BY
子句。
表格本质上是无序的。尽管如此,在许多 DBMS 中 - 在这种情况下是 SQL Server - 我们可以选择在表上添加“集群索引”,因此有一个 B 树索引(具有所选顺序)导致行。
然而,这与结果集的呈现顺序无关。在结果集中保证顺序的唯一方法是指定一个ORDER BY
子句。
如果不指定ORDER BY
子句,则顺序可以是任意的:
您可能有一个堆(没有聚集索引的表),但有时仍会看到按顺序排列的结果id
,有时以随机顺序排列。
您可能有一个聚簇表,但有时仍会看到按顺序排列的结果id
,有时以随机顺序排列。
注意上面没有区别。底层表结构不保证顺序。
因此,如果您确实希望将行以特定顺序存储在磁盘上,请创建(id)
聚集索引。但请注意,如果没有ORDER BY id
,您仍然会以任意顺序获得结果。