SQL Server 2005を使用しています。NULLSを許可しながら、列の値を一意に制限します。
私の現在のソリューションには、次のようなビューの一意のインデックスが含まれています。
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)
より良いアイデアはありますか?
一意性の目的に違反するため、それができないことを確認してください。
ただし、この人は適切な回避策を持っているようです: http://sqlservercodebook.blogspot.com/2008/04/multiple-null-values-in-unique-index-in.html
SQL Server 2008を使用して、フィルター処理されたインデックス http://msdn.Microsoft.com/en-us/library/cc280372.aspx を作成できます。 (Simonはこれをコメントとして追加しましたが、コメントは簡単に見落とされるため、独自の回答に値すると考えました。)
別のオプションは一意性をチェックするトリガーですが、これはパフォーマンスに影響を与える可能性があります。
計算列のトリックは、「ヌルバスター」として広く知られています。私のメモはSteve Kassにクレジットしています:
CREATE TABLE dupNulls (
pk int identity(1,1) primary key,
X int NULL,
nullbuster as (case when X is null then pk else 0 end),
CONSTRAINT dupNulls_uqX UNIQUE (X,nullbuster)
)