ホームページ > データベース > mysql チュートリアル > SQL Server で条件付きの一意性を強制するにはどうすればよいですか?

SQL Server で条件付きの一意性を強制するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-10 08:17:40
オリジナル
424 人が閲覧しました

How Can I Enforce Conditional Uniqueness in 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート