0

ID ごとに、値 X を持つ行は 1 つしか存在できないという制約を記述しようとしています。

あまり意味がないかもしれないので、例を挙げましょう。

テーブルに 3 つの行と 2 つの列があり、各行には同じ ID (列 1) がありますが、2 番目の列にはさまざまな値があり、そのうちの 2 つは同一で、3 番目は一意であるとします。一意の値が一意のままであることを確認するにはどうすればよいですか?

これが私が使ってきた制約です:

ADD CONSTRAINT myConstraint UNIQUE (col1, col2);

col2 NULL を作成して重複を作成し、一意にするときに NOT NULL を使用できると考えました (単一の値が一意であることだけを気にするため)。これが機能しない理由は、何らかの理由で私の制約がNULLの重複を許可していないためです.NULLを比較する方法を知っているようです...

と言いたいのが理想です。

ADD CONSTRAINT myConstraint UNIQUE (col1, col2 = 'REQUESTED');

しかし、そのようなものは存在しません。

制約を調べましたCHECKが、チェック制約を使用してこれを行うように指示する方法がわかりません。

基本的に、着信 ID を取得し、 column2 の値が である同一の ID が他にないことを確認したいと考えていますREQUESTED

これがあまり意味をなさない場合は申し訳ありませんが、これを説明するために最善を尽くしています.

4

1 に答える 1

1

フィルター処理されたインデックスを使用できます: http://msdn.microsoft.com/en-us/library/cc280372(v=sql.100).aspx

CREATE UNIQUE NONCLUSTERED INDEX [test_idx] ON [dbo].[test] ([col1], [col2])
WHERE ([col2] IS NOT NULL)

これは一意のインデックスであるため、特定の ID(col1) に重複した col2 値を挿入して、必要な制約として機能させることはできません。あなたの場合、col2 = 'REQUESTED'フィルターを使用することもできます。

于 2012-12-13T22:57:53.220 に答える