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

トリガーを使用せずに SQL Server で条件付き一意制約を強制するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-10 06:40:44466ブラウズ

How Can I Enforce Conditional Unique Constraints in SQL Server Without Using Triggers?

SQL Server での条件付き一意制約の実現: トリガーフリーのアプローチ

データの整合性を維持するには、多くの場合、データのサブセットに選択的に適用される一意の制約が必要になります。 トリガーは一般的なソリューションですが、SQL Server ではフィルターされたインデックスを使用したより洗練された方法が提供されています。

条件付きの一意性のためにフィルタリングされたインデックスを活用する

フィルターされたインデックスは、フィルター条件によって決定されるテーブルの行の一部のみにインデックスを付けます。これにより、条件付きの一意制約が可能になります。

RecordStatus が 1 の場合にのみ (ID, RecordStatus) の一意性が必要なシナリオを考えてみましょう。解決策は簡単です。

<code class="language-sql">CREATE UNIQUE INDEX MyIndex
ON MyTable(ID)
WHERE RecordStatus = 1;</code>

このインデックスは、RecordStatus = 1 の行のみにインデックスを付けるため、このサブセットの一意性が強制されます。 この制約に違反すると、エラーが発生します:

<code>Msg 2601, Level 14, State 1, Line 13
Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>

重要な考慮事項

フィルター インデックスは SQL Server 2008 で導入されました。以前のバージョンでは、トリガー、または一意の制約と行のバージョン管理手法の組み合わせが代替手段として必要です。

以上がトリガーを使用せずに SQL Server で条件付き一意制約を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。