ホームページ > データベース > mysql チュートリアル > SQL Server の Null 許容列に一意の制約を適用するにはどうすればよいですか?

SQL Server の Null 許容列に一意の制約を適用するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-04 00:05:39
オリジナル
977 人が閲覧しました

How to Enforce Unique Constraints on Nullable Columns in SQL Server?

NULL 許容列に対する NULL 以外の一意性制約

多くの場合、NULL 値を許可しながら列に一意性を強制することが望ましいです。ただし、SQL Server 2005 で NULL 許容列に一意のインデックスを作成するのは困難な場合があります。

現在のソリューション

一般的な回避策の 1 つは、実体化された列に一意のインデックスを作成することです。 null 値を除外するビュー:

CREATE VIEW vw_unq WITH SCHEMABINDING AS
    SELECT Column1
      FROM MyTable
     WHERE Column1 IS NOT NULL

CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
ログイン後にコピー

より良い代替手段

SQL Server 2008 では、より優れたソリューションを提供するフィルター インデックスが導入されました。

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

このインデックスは、Null 以外の値に一意性を適用しながら、Null 値を許可します。

追加オプション:トリガー

もう 1 つの方法は、挿入および更新操作中に一意性をチェックするトリガーを作成することです。

CREATE TRIGGER trg_MyTable_CheckUnique ON MyTable AFTER INSERT, UPDATE
AS
BEGIN
    IF EXISTS(SELECT * FROM MyTable WHERE Column1 = NEW.Column1 AND Column1 IS NOT NULL)
    BEGIN
        RAISERROR('Duplicate value for Column1.', 16, 1)
    END
END
ログイン後にコピー

ただし、トリガーは、特に同時実行性の高いシステムではパフォーマンスに影響を与える可能性があります。

以上がSQL Server の Null 許容列に一意の制約を適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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