在 SQL Server 数据库中,我创建了一个唯一约束以确保其中一个表只包含唯一的值对。
现在的问题是我得到的记录顺序不同。记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,无需任何排序。
我到处检查过,但找不到没有排序顺序来创建唯一约束的方法。这完全支持吗?
在 SQL Server 数据库中,我创建了一个唯一约束以确保其中一个表只包含唯一的值对。
现在的问题是我得到的记录顺序不同。记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,无需任何排序。
我到处检查过,但找不到没有排序顺序来创建唯一约束的方法。这完全支持吗?
记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,无需任何排序。
啊,老排序问题 - 初学者的 SQL。
TABLES 有一个排序顺序,即聚集索引的顺序。缺少未定义的奇数。
结果没有顺序,除非定义。如果 SQL 认为它可以更好地处理查询,它可以更改顺序。这是基本的 - 您处理数据集,并且数据集本身没有排序。
所以,如果你想要一个订单,要求它。
但无法找到一种方法来创建没有排序顺序的唯一约束。
为什么你需要一个唯一约束的订单?唯一索引就足够了,或者?我不会使唯一性成为约束,而是将 - 标准 - 字段上的唯一索引。特别是因为索引有利于 - 验证它们是唯一的,因此无论如何都需要。
如果您想以“原始”顺序获取记录 - 您应该使用任何标记此顺序的字段,例如身份序列/主键(可能是您可以使用的最佳选项),或创建日期或其他任何内容.
仅当您使用聚集索引
时,
您的表中的行(实际上,在文件中)实际上是按特定顺序排序的,但是,即使在这种情况下,也不能保证在您选择时会保留此顺序或任何顺序该表中的行,没有任何 order by 子句。
通常,对于聚簇表,您将按照聚簇索引的顺序获得结果,但这不是您可以依赖的,并且无论顺序很重要,您都应该在查询中提供 ORDER BY。
使用 ROW_NUMBER,您可以在不使用 sort_order 的情况下获取订单的存储方式。我希望它有所帮助。