在SQL Server数据库中,我创建了一个Unique Constraint,以确保其中一个表只包含唯一的值对。
现在的问题是我得到的记录顺序不同。记录是按顺序排序的,但是我希望它们按照原始顺序排列,就像它们存在于表中一样,没有任何排序。
我到处检查过,但找不到一种方法来创建没有排序顺序的唯一约束。这支持了吗?
答案 0 :(得分:10)
记录已排序,但我希望它们按原始顺序排列,就像它们存在于表中一样,没有任何记录 排序
啊,旧的排序问题 - 初学者的SQL。
TABLES的排序顺序是聚集索引的顺序。错过了奇怪的事情。
结果 NO ORDER UNLESS DEFINED 。如果SQL认为可以更好地处理查询,则可以更改顺序。这是基础 - 您处理数据集,并且数据集本身不是有序的。
所以,如果你想要订单,请问它。
但无法找到一种方法来创建没有排序顺序的唯一约束。
为什么需要订单才能获得唯一约束?一个独特的索引就足够了,或者?我不会将唯一性作为约束,而是将 - 标准 - 作为字段的唯一索引。特别是因为指数是有益的 - 验证它们是独特的,因此无论如何都需要。
答案 1 :(得分:3)
如果您想以“原始”顺序获取记录 - 您应该使用任何标记此顺序的字段,例如标识序列/主键(可能是您可以使用的最佳选项)或创建日期或其他任何东西。
ur表中的行(物理上,在文件中)实际上只有在使用clustered index时按特定顺序排序,但是,即使在这种情况下,也无法保证这个或任何顺序将被保留当您从该表中选择行时,没有任何order by子句。
通常,使用聚簇表,您将按聚集索引的顺序获得结果,但这不是您可以信赖的,并且在订单很重要的地方,您应该在查询中提供ORDER BY。
答案 2 :(得分:-2)
使用ROW_NUMBER,您可以在不使用sort_order的情况下获取订单的存储方式。我希望它有所帮助。