2

在 SQL Server 数据库中,我创建了一个唯一约束以确保其中一个表只包含唯一的值对。

现在的问题是我得到的记录顺序不同。记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,无需任何排序。

我到处检查过,但找不到没有排序顺序来创建唯一约束的方法。这完全支持吗?

4

3 回答 3

10

记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,无需任何排序。

啊,老排序问题 - 初学者的 SQL。

TABLES 有一个排序顺序,即聚集索引的顺序。缺少未定义的奇数。

结果没有顺序,除非定义。如果 SQL 认为它可以更好地处理查询,它可以更改顺序。这是基本的 - 您处理数据集,并且数据集本身没有排序。

所以,如果你想要一个订单,要求它。

但无法找到一种方法来创建没有排序顺序的唯一约束。

为什么你需要一个唯一约束的订单?唯一索引就足够了,或者?我不会使唯一性成为约束,而是将 - 标准 - 字段上的唯一索引。特别是因为索引有利于 - 验证它们是唯一的,因此无论如何都需要。

于 2012-05-31T20:08:54.233 回答
3

如果您想以“原始”顺序获取记录 - 您应该使用任何标记此顺序的字段,例如身份序列/主键(可能是您可以使用的最佳选项),或创建日期或其他任何内容. 仅当您使用聚集索引
时, 您的表中的行(实际上,在文件中)实际上是按特定顺序排序的,但是,即使在这种情况下,也不能保证在您选择时会保留此顺序或任何顺序该表中的行,没有任何 order by 子句。 通常,对于聚簇表,您将按照聚簇索引的顺序获得结果,但这不是您可以依赖的,并且无论顺序很重要,您都应该在查询中提供 ORDER BY。

于 2012-05-31T20:11:49.270 回答
-2

使用 ROW_NUMBER,您可以在不使用 sort_order 的情况下获取订单的存储方式。我希望它有所帮助。

于 2012-06-01T18:06:07.203 回答