【发布时间】:2018-12-03 03:53:56
【问题描述】:
我有一个这样的表,Id 是主键,所以显然这些表是按 Id 排序的。
+----+----------+--------+
| Id | OrderNo | Col2 |
+----+----------+--------+
| 1 | 3 | Value3 |
| 2 | 1 | Value1 |
| 3 | 2 | Value2 |
+----+----------+--------+
我要做的是在OrderNo 每次新插入后重新排序表格,如下所示:
+----+----------+--------+
| Id | OrderNo | Col2 |
+----+----------+--------+
| 2 | 1 | Value1 |
| 3 | 2 | Value2 |
| 1 | 3 | Value3 |
| 4 | 4 | Value4 |
+----+----------+--------+
这可能吗?我查看了this question,它说要删除并重新创建表。无论如何,我可以一口气完成吗?
事实上,我尝试在接受的答案中执行第一个查询,但 SSMS 给了我一个错误。
【问题讨论】:
-
制作
OrderId主键,表格会自动排序。 -
表格数据通常不遵循任何特定的顺序,因为它并不重要。您应该在 SELECT 查询中使用 ORDER BY 子句来获得所需的顺序。
-
重新排序表本身是一个错误的要求。您不关心数据库内部如何存储数据。在 SELECT 查询中使用 ORDER BY。这将为您提供每次所需的东西。
-
有没有办法去掉主键自动重排序和另一列排序?
-
RDBMS 中的表本质上是一个 无序 数据包 - 即使将
Id作为您的主键,它也是 NOT 排序的钥匙!不断地“重新排序”表格没有任何意义,也没有任何好处——你只是在浪费你的资源。在 RDBMS 中获得排序的唯一方法是通过SELECT从表中指定一个显式ORDER BY
标签: sql sql-server