2

SQL Serverデータベースで、テーブルの1つに一意の値のペアのみが含まれるようにするために、一意の制約を作成しました。

問題は、取得するレコードの順序が異なることです。レコードはソートされていますが、テーブルに存在するのと同じように、ソートせずに元の順序で並べてほしいと思います。

どこでもチェックしましたが、並べ替え順序なしで一意の制約を作成する方法を見つけることができませんでした。これはまったくサポートされていますか?

4

3 に答える 3

10

レコードはソートされていますが、テーブルに存在するのと同じように、ソートせずに元の順序で並べてほしいと思います。

ああ、古いソートの問題-初心者のためのSQL。

TABLESには、クラスター化インデックスの順序であるソート順があります。奇妙なものが定義されていないことを見逃している。

結果は、定義されていない限り、順序はありません。SQLは、クエリをより適切に処理できると判断した場合、順序を変更できます。これは基本的なものです。データセットを処理し、データセット自体は順序付けられていません。

したがって、注文が必要な場合は、それを求めてください。

しかし、ソート順なしで一意の制約を作成する方法を見つけることができませんでした。

なぜ一意性制約の注文が必要なのですか?一意のインデックスで十分です、または?一意性を制約にするのではなく、フィールドに-標準-一意のインデックスを設定します。特にインデックスは、それらが一意であり、したがってとにかく必要であることを検証するのに適しています。

于 2012-05-31T20:08:54.233 に答える
3

レコードを「元の」順序で取得する場合は、IDシーケンス/主キー(おそらく使用できる最良のオプション)、作成日など、この順序を示す任意のフィールドを使用する必要があります。 。 urテーブル(物理的にはファイル内)の行は、クラスター化インデックス
を使用する場合にのみ特定の順序で実際に並べ替えられますが、その場合でも、選択したときにこの順序または任意の順序が保持される保証はありません。そのテーブルの行。orderby句はありません。 通常、クラスター化テーブルでは、クラスター化インデックスの順序で結果が得られますが、これは信頼できるものではありません。順序が重要な場合は、クエリでORDERBYを指定する必要があります。

于 2012-05-31T20:11:49.270 に答える
-2

ROW_NUMBERを使用すると、sort_orderを使用せずに注文がどのように保存されるかを取得できます。お役に立てば幸いです。

于 2012-06-01T18:06:07.203 に答える