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 サイトの他の関連記事を参照してください。