2016-12-23 21 views
0

我々は、SQL Serverの特定のDataTableにユニークなテーブル制約を強制しようとしている私が働いているが、私はいくつかの問題に実行しています。プライマリキーで注文したいのですが、インデックスキーに含めると、プライマリキー以降は常に一意のIDを持つため、一意性が強制されなくなります。主キーを持つユニークなSQL表の制約の作成

私は、インデックス付きのキーからIDを削除した場合、それは私が欲しいものである、もうそれをすることになっているように動作しますが、主キーによって、それはもはやソートされます。別の列でソートします。

ソートに使用できるように制約にプライマリキーを含めるにはどうすればよいですか。一意性のためにテーブル制約をチェックするときに無視してください(つまり、すべての場合に新しいレコードを作成することはできません)他の情報はID以外は同じです)

UPDATE:どのように私は、テーブル、インデックスに入れることができるよりも多くの列を持っている状況に対処するのですか?これらに重複したエントリを強制することはできませんか?

+3

制約は何も注文しません。クエリに 'ORDER BY'句を含めないと、*すべての順序が保証されません。 *クエリプロセッサがその順序を変更しない場合は、事故*によってのみ、クラスタードインデックス順(必ずしもPKではない)によって行orderdが取得されることがあります。並列処理はほぼ結果の順序を変更することが保証されています –

+0

OK Gotcha ...実際には違いはありません。クエリ上にORDER BY IDを入れて更新された部分の返品で同じことを – MattE

+0

:試すことができます(http://stackoverflow.com/questions/15800250/add-unique-constraint-to-combination-of-two-columns) – TheGameiswar

答えて

0

リレーショナルデータベースは、集合論と述語論理に基づいて構築されています。セット理論によると、A {1,2,3} & B {2,3,1}のようなセット間に違いはありません。 これは、結果が特定の順序で来るRDBMSに保証がない理由です。

しかし、あなたが明示的SELECT文でORDER BYを提供するとき、あなたはあなたのためにそれらを取得します。

だから、より良いあなたは、フロントエンドにしたり、クエリにORDER BY句を追加することによってそれを行います。

関連する問題