ある場合にのみ、私はこれと同様の構成、既存のSQL Serverのテーブルを持っている:SQL制約 - 値のユニークな組み合わせ別の列がnull
[Username] [Gateway] [Code] [ActiveTo] [OrgId]
------------------------------------------------------
user1 gateway 50 Null 100
user1 gateway 50 Null 101
user2 gateway2 51 Null 102
user3 gateway3 52 12/08/17 103
このテーブルには、すでにユーザー名、ゲートウェイの重複組み合わせを持っていますコード。追加された新しいユーザーに[Username]、[Gateway]、[Code]の一意の組み合わせがありますが、上記の2つのuser1エントリなどの既存の2つの重複は無視されます(一致する新しいエントリは無視されません)既存のもの)。
しかし、私は重複の[ActiveTo]値がnullの場合にのみこれを適用したいと考えています(新規エントリのデフォルト値はActiveTo
です)。
したがって、上記の表に制約を適用すると、2つのuser1重複が無視されます。
[user2]、[gateway2]、[52]、[Null]、[104]の行を追加すると問題ありません。
[user2]、[gateway2]、[51]、[Null]、[105]の行を追加するとエラーが発生します。
しかし、行[user3]、[gateway3]、[52]、[Null]、[106]を追加すると問題ありません。
アイデア?
を、私たちはテーブルを拡張することができていますか?制約はいつでも再適用可能でなければならないので、「一時的な」要件(既存の行)は、行を明示的にマークする新しい列としてモデル化するほうがよいでしょう。 OrgId、それが常に成長し、制約が適用されるときに使用する値がわかっている場合) –