ホームページ >データベース >mysql チュートリアル >SQL Server で条件付きの一意性を強制するにはどうすればよいですか?
SQL Server での条件付き一意制約の実装
SQL Server の一意の制約により、指定された列にわたる重複エントリが防止されます。 しかし、特定の条件下でのみ一意性を強制するにはどうすればよいでしょうか? 解決策は、フィルタリングされたインデックスを利用することです。
SQL Server のドキュメントによると、フィルターされたインデックスは、フィルター述語によって定義されたテーブル行のサブセットのみにインデックスを付ける非クラスター化インデックスです。
この機能を使用すると、一意のインデックスと条件付きフィルターを組み合わせて、一意性を選択的に適用できます。 次のテーブルを考えてみましょう:
<code class="language-sql">Table(ID, Name, RecordStatus)</code>
ここで、RecordStatus
は 1 (アクティブ) または 2 (削除) です。 ID
が 1 の場合にのみ RecordStatus
値を一意にするには、フィルターされたインデックスを作成します。
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
これにより、アクティブなレコード (ID
の場合) に対してのみ RecordStatus = 1
に一意性が適用されます。 ID
を使用して重複した RecordStatus = 1
を挿入しようとすると、エラーが発生します:
<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
フィルターされたインデックスは SQL Server 2008 で導入されたことを覚えておくことが重要です。以前のバージョン (SQL Server 2005 など) では、条件付きの一意性を実現するにはトリガーなどの代替アプローチが必要です。
以上がSQL Server で条件付きの一意性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。