没有排序顺序的SQL Server唯一约束

时间:2012-05-31 19:57:13

标签: c# sql-server database unique-constraint

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

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

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

3 个答案:

答案 0 :(得分:10)

  

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

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

TABLES的排序顺序是聚集索引的顺序。错过了奇怪的事情。

结果 NO ORDER UNLESS DEFINED 。如果SQL认为可以更好地处理查询,则可以更改顺序。这是基础 - 您处理数据集,并且数据集本身不是有序的。

所以,如果你想要订单,请问它。

  

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

为什么需要订单才能获得唯一约束?一个独特的索引就足够了,或者?我不会将唯一性作为约束,而是将 - 标准 - 作为字段的唯一索引。特别是因为指数是有益的 - 验证它们是独特的,因此无论如何都需要。

答案 1 :(得分:3)

如果您想以“原始”顺序获取记录 - 您应该使用任何标记此顺序的字段,例如标识序列/主键(可能是您可以使用的最佳选项)或创建日期或其他任何东西。
ur表中的行(物理上,在文件中)实际上只有在使用clustered index时按特定顺序排序,但是,即使在这种情况下,也无法保证这个或任何顺序将被保留当您从该表中选择行时,没有任何order by子句。
通常,使用聚簇表,您将按聚集索引的顺序获得结果,但这不是您可以信赖的,并且在订单很重要的地方,您应该在查询中提供ORDER BY。

答案 2 :(得分:-2)

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