ホームページ > データベース > mysql チュートリアル > SQL Server で NULL 値を許可する列に一意のインデックスを作成するにはどうすればよいですか?

SQL Server で NULL 値を許可する列に一意のインデックスを作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 22:57:41
オリジナル
429 人が閲覧しました

How Can I Create a Unique Index on a Column Allowing NULL Values in SQL Server?

NULL 列に一意のインデックスを作成する

NULL 値を許可する列には一意制約を適用できないという一般的な誤解にもかかわらず、実際には方法があります。 SQL Server でこれを実現するには2005.

アプローチ 1: 一意のインデックスを持つビュー

質問で言及されているアプローチでは、ビューを利用して NULL を除外し、そのビューに一意のインデックスを作成します。このソリューションは効果的ではありますが、複雑さとパフォーマンスのオーバーヘッドが追加されます。

アプローチ 2: フィルターされたインデックス (SQL Server 2008 )

SQL Server 2008 を導入すると、フィルターされたインデックスを使用して次のことを指定できます。インデックスを作成するときの WHERE 句。これにより、NULL を含む可能性のある列に一意のインデックスを作成できます。

構文:

CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL
ログイン後にコピー

アプローチ 3: トリガーベースの強制

もう 1 つの方法は、行が挿入または更新されるたびに一意性をチェックするトリガーを実装することです。ただし、トリガーは、特に挿入/更新率が高いテーブルのパフォーマンスに影響を与える可能性があります。

実装:

CREATE TRIGGER MyTable_TRG_Unique ON MyTable
AFTER INSERT OR UPDATE
AS
BEGIN
  IF EXISTS(SELECT 1 FROM MyTable WHERE Column1 = (SELECT Column1 FROM INSERTED))
  BEGIN
    RAISERROR('Column1 must be unique.', 16, 1); -- Handle error as needed
  END
END
ログイン後にコピー

特定の要件とパフォーマンスの制約に基づいて、各アプローチの長所と短所を検討してください。アプリケーションの

以上がSQL Server で NULL 値を許可する列に一意のインデックスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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